Files
codeql/ql/src/codeql_ruby/ast/internal/Module.qll

130 lines
3.9 KiB
Plaintext

private import codeql_ruby.AST
private import codeql_ruby.ast.internal.AST
private import codeql_ruby.ast.internal.Constant
private import codeql_ruby.ast.internal.Expr
private import codeql_ruby.ast.internal.TreeSitter
module ModuleBase {
abstract class Range extends BodyStatement::Range { }
}
module Namespace {
abstract class Range extends ModuleBase::Range, ConstantWriteAccess::Range {
override predicate child(string label, AstNode::Range child) {
ModuleBase::Range.super.child(label, child) or
ConstantWriteAccess::Range.super.child(label, child)
}
override string toString() { result = ModuleBase::Range.super.toString() }
}
}
module Toplevel {
class Range extends ModuleBase::Range, @program {
final override Generated::Program generated;
Range() { generated.getLocation().getFile().getExtension() != "erb" }
final override Generated::AstNode getChild(int i) {
result = generated.getChild(i) and
not result instanceof Generated::BeginBlock
}
final StmtSequence getBeginBlock(int n) {
result = rank[n](int i, Generated::BeginBlock b | b = generated.getChild(i) | b order by i)
}
final override string toString() { result = generated.getLocation().getFile().getBaseName() }
override predicate child(string label, AstNode::Range child) {
ModuleBase::Range.super.child(label, child)
or
label = "getBeginBlock" and child = getBeginBlock(_)
}
}
}
module Class {
class Range extends Namespace::Range, @class {
final override Generated::Class generated;
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string getName() {
result = generated.getName().(Generated::Token).getValue() or
result =
generated.getName().(Generated::ScopeResolution).getName().(Generated::Token).getValue()
}
final override Expr::Range getScopeExpr() {
result = generated.getName().(Generated::ScopeResolution).getScope()
}
final override predicate hasGlobalScope() {
exists(Generated::ScopeResolution sr |
sr = generated.getName() and
not exists(sr.getScope())
)
}
final Expr getSuperclassExpr() { result = generated.getSuperclass().getChild() }
final override string toString() { result = this.getName() }
override predicate child(string label, AstNode::Range child) {
Namespace::Range.super.child(label, child)
or
label = "getSuperclassExpr" and child = getSuperclassExpr()
}
}
}
module SingletonClass {
class Range extends ModuleBase::Range, @singleton_class {
final override Generated::SingletonClass generated;
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final Expr getValue() { result = generated.getValue() }
final override string toString() { result = "class << ..." }
override predicate child(string label, AstNode::Range child) {
ModuleBase::Range.super.child(label, child)
or
label = "getValue" and child = getValue()
}
}
}
module Module {
class Range extends Namespace::Range, @module {
final override Generated::Module generated;
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string getName() {
result = generated.getName().(Generated::Token).getValue() or
result =
generated.getName().(Generated::ScopeResolution).getName().(Generated::Token).getValue()
}
final override Expr::Range getScopeExpr() {
result = generated.getName().(Generated::ScopeResolution).getScope()
}
final override predicate hasGlobalScope() {
exists(Generated::ScopeResolution sr |
sr = generated.getName() and
not exists(sr.getScope())
)
}
final override string toString() { result = this.getName() }
override predicate child(string label, AstNode::Range child) {
Namespace::Range.super.child(label, child)
}
}
}