mirror of
https://github.com/github/codeql.git
synced 2025-12-22 11:46:32 +01:00
Ruby: add getAnAncestor, getADescendent
This commit is contained in:
@@ -23,6 +23,20 @@ class Module extends TModule {
|
|||||||
/** Gets an `include`d module. */
|
/** Gets an `include`d module. */
|
||||||
Module getAnIncludedModule() { result = getAnIncludedModule(this) }
|
Module getAnIncludedModule() { result = getAnIncludedModule(this) }
|
||||||
|
|
||||||
|
/** Gets the super class or an included or prepended module. */
|
||||||
|
Module getADirectAncestor() {
|
||||||
|
result = [this.getSuperClass(), this.getAPrependedModule(), this.getAnIncludedModule()]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Gets a direct subclass or module including or prepending this one. */
|
||||||
|
Module getADirectDescendent() { this = result.getADirectAncestor() }
|
||||||
|
|
||||||
|
/** Gets a module that is transitively subclassed, included, or prepended by this module. */
|
||||||
|
Module getAnAncestor() { result = this.getADirectAncestor*() }
|
||||||
|
|
||||||
|
/** Gets a module that transitively subclasses, includes, or prepends this module. */
|
||||||
|
Module getADescendent() { result = this.getADirectDescendent*() }
|
||||||
|
|
||||||
/** Holds if this module is a class. */
|
/** Holds if this module is a class. */
|
||||||
pragma[noinline]
|
pragma[noinline]
|
||||||
predicate isClass() {
|
predicate isClass() {
|
||||||
|
|||||||
@@ -703,6 +703,17 @@ class ModuleNode instanceof Module {
|
|||||||
/** Gets an `include`d module. */
|
/** Gets an `include`d module. */
|
||||||
final ModuleNode getAnIncludedModule() { result = super.getAnIncludedModule() }
|
final ModuleNode getAnIncludedModule() { result = super.getAnIncludedModule() }
|
||||||
|
|
||||||
|
/** Gets the super class or an included or prepended module. */
|
||||||
|
final ModuleNode getADirectAncestor() { result = super.getADirectAncestor() }
|
||||||
|
|
||||||
|
/** Gets a direct subclass or module including or prepending this one. */
|
||||||
|
final ModuleNode getADirectDescendent() { result = super.getADirectDescendent() }
|
||||||
|
|
||||||
|
/** Gets a module that is transitively subclassed, included, or prepended by this module. */
|
||||||
|
final ModuleNode getAnAncestor() { result = super.getAnAncestor() }
|
||||||
|
|
||||||
|
/** Gets a module that transitively subclasses, includes, or prepends this module. */
|
||||||
|
final ModuleNode getADescendent() { result = super.getADescendent() }
|
||||||
/** Holds if this module is a class. */
|
/** Holds if this module is a class. */
|
||||||
predicate isClass() { super.isClass() }
|
predicate isClass() { super.isClass() }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user