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. */
|
||||
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. */
|
||||
pragma[noinline]
|
||||
predicate isClass() {
|
||||
|
||||
@@ -703,6 +703,17 @@ class ModuleNode instanceof Module {
|
||||
/** Gets an `include`d module. */
|
||||
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. */
|
||||
predicate isClass() { super.isClass() }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user