mirror of
https://github.com/github/codeql.git
synced 2026-02-20 00:43:44 +01:00
100 lines
3.0 KiB
Plaintext
100 lines
3.0 KiB
Plaintext
private import codeql_ruby.AST
|
|
private import codeql_ruby.ast.internal.Expr
|
|
private import codeql_ruby.ast.internal.Parameter
|
|
private import TreeSitter
|
|
|
|
module Callable {
|
|
abstract class Range extends Expr::Range {
|
|
abstract Parameter::Range getParameter(int n);
|
|
}
|
|
}
|
|
|
|
module Method {
|
|
class Range extends Callable::Range, BodyStatement::Range, @method {
|
|
final override Generated::Method generated;
|
|
|
|
override Parameter::Range getParameter(int n) { result = generated.getParameters().getChild(n) }
|
|
|
|
string getName() {
|
|
result = generated.getName().(Generated::Token).getValue() or
|
|
result = generated.getName().(SymbolLiteral).getValueText() or
|
|
result = generated.getName().(Generated::Setter).getName().getValue() + "="
|
|
}
|
|
|
|
final predicate isSetter() { generated.getName() instanceof Generated::Setter }
|
|
|
|
final override Expr getExpr(int i) { result = generated.getChild(i) }
|
|
|
|
final override string toString() { result = this.getName() }
|
|
}
|
|
}
|
|
|
|
module SingletonMethod {
|
|
class Range extends Callable::Range, BodyStatement::Range, @singleton_method {
|
|
final override Generated::SingletonMethod generated;
|
|
|
|
override Parameter::Range getParameter(int n) { result = generated.getParameters().getChild(n) }
|
|
|
|
string getName() {
|
|
result = generated.getName().(Generated::Token).getValue() or
|
|
result = generated.getName().(SymbolLiteral).getValueText() or
|
|
result = generated.getName().(Generated::Setter).getName().getValue() + "="
|
|
}
|
|
|
|
final override Expr getExpr(int i) { result = generated.getChild(i) }
|
|
|
|
final override string toString() { result = this.getName() }
|
|
}
|
|
}
|
|
|
|
module Lambda {
|
|
class Range extends Callable::Range, BodyStatement::Range, @lambda {
|
|
final override Generated::Lambda generated;
|
|
|
|
final override Parameter::Range getParameter(int n) {
|
|
result = generated.getParameters().getChild(n)
|
|
}
|
|
|
|
final override Expr getExpr(int i) {
|
|
result = generated.getBody().(Generated::DoBlock).getChild(i) or
|
|
result = generated.getBody().(Generated::Block).getChild(i)
|
|
}
|
|
|
|
final override string toString() { result = "-> { ... }" }
|
|
}
|
|
}
|
|
|
|
module Block {
|
|
abstract class Range extends Callable::Range, ExprSequence::Range {
|
|
Range() { not generated.getParent() instanceof Generated::Lambda }
|
|
}
|
|
}
|
|
|
|
module DoBlock {
|
|
class Range extends Block::Range, BodyStatement::Range, @do_block {
|
|
final override Generated::DoBlock generated;
|
|
|
|
final override Expr getExpr(int i) { result = generated.getChild(i) }
|
|
|
|
final override Parameter::Range getParameter(int n) {
|
|
result = generated.getParameters().getChild(n)
|
|
}
|
|
|
|
final override string toString() { result = "do ... end" }
|
|
}
|
|
}
|
|
|
|
module BraceBlock {
|
|
class Range extends Block::Range, @block {
|
|
final override Generated::Block generated;
|
|
|
|
final override Parameter::Range getParameter(int n) {
|
|
result = generated.getParameters().getChild(n)
|
|
}
|
|
|
|
final override Expr getExpr(int i) { result = generated.getChild(i) }
|
|
|
|
final override string toString() { result = "{ ... }" }
|
|
}
|
|
}
|