mirror of
https://github.com/github/codeql.git
synced 2026-02-23 02:13:41 +01:00
Add Pattern::getAVariable() and use self range field througout
This commit is contained in:
@@ -5,19 +5,33 @@ abstract class CallableRange extends AstNode {
|
||||
abstract Parameter getParameter(int n);
|
||||
}
|
||||
|
||||
private class MethodRange extends CallableRange, @method {
|
||||
class MethodRange extends CallableRange, @method {
|
||||
final override Generated::Method generated;
|
||||
|
||||
override Parameter getParameter(int n) { result = generated.getParameters().getChild(n) }
|
||||
|
||||
string getName() {
|
||||
result = generated.getName().(Generated::Token).getValue() or
|
||||
// TODO: use hand-written Symbol class
|
||||
result = generated.getName().(Generated::Symbol).toString() or
|
||||
result = generated.getName().(Generated::Setter).getName().getValue() + "="
|
||||
}
|
||||
}
|
||||
|
||||
private class SingletonMethodRange extends CallableRange, @singleton_method {
|
||||
class SingletonMethodRange extends CallableRange, @singleton_method {
|
||||
final override Generated::SingletonMethod generated;
|
||||
|
||||
override Parameter getParameter(int n) { result = generated.getParameters().getChild(n) }
|
||||
|
||||
string getName() {
|
||||
result = generated.getName().(Generated::Token).getValue() or
|
||||
// TODO: use hand-written Symbol class
|
||||
result = generated.getName().(Generated::Symbol).toString() or
|
||||
result = generated.getName().(Generated::Setter).getName().getValue() + "="
|
||||
}
|
||||
}
|
||||
|
||||
private class LambdaRange extends CallableRange, @lambda {
|
||||
class LambdaRange extends CallableRange, @lambda {
|
||||
final override Generated::Lambda generated;
|
||||
|
||||
final override Parameter getParameter(int n) { result = generated.getParameters().getChild(n) }
|
||||
@@ -29,13 +43,13 @@ abstract class BlockRange extends CallableRange {
|
||||
final override Parameter getParameter(int n) { result = params.getChild(n) }
|
||||
}
|
||||
|
||||
private class DoBlockRange extends BlockRange, @do_block {
|
||||
class DoBlockRange extends BlockRange, @do_block {
|
||||
final override Generated::DoBlock generated;
|
||||
|
||||
DoBlockRange() { params = generated.getParameters() }
|
||||
}
|
||||
|
||||
private class BraceBlockRange extends BlockRange, @block {
|
||||
class BraceBlockRange extends BlockRange, @block {
|
||||
final override Generated::Block generated;
|
||||
|
||||
BraceBlockRange() { params = generated.getParameters() }
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import codeql_ruby.AST
|
||||
private import TreeSitter
|
||||
private import Variable
|
||||
private import codeql.Locations
|
||||
|
||||
private predicate tuplePatternNode(Generated::AstNode n, boolean parameter) {
|
||||
@@ -36,30 +37,38 @@ predicate assignment(Generated::Identifier i, boolean parameter) { patternNode(i
|
||||
|
||||
abstract class PatternRange extends AstNode {
|
||||
PatternRange() { patternNode(this, _) }
|
||||
|
||||
abstract Variable getAVariable();
|
||||
}
|
||||
|
||||
private class VariablePatternRange extends PatternRange {
|
||||
class VariablePatternRange extends PatternRange {
|
||||
override Generated::Identifier generated;
|
||||
|
||||
string getVariableName() { result = generated.getValue() }
|
||||
|
||||
override Variable getAVariable() { access(this, result) }
|
||||
}
|
||||
|
||||
abstract class TuplePatternRange extends PatternRange {
|
||||
abstract Pattern getElement(int i);
|
||||
abstract PatternRange getElement(int i);
|
||||
|
||||
override Variable getAVariable() { result = this.getElement(_).getAVariable() }
|
||||
}
|
||||
|
||||
private class ParameterTuplePatternRange extends TuplePatternRange {
|
||||
override Generated::DestructuredParameter generated;
|
||||
|
||||
override Pattern getElement(int i) { result = generated.getChild(i) }
|
||||
override PatternRange getElement(int i) { result = generated.getChild(i) }
|
||||
}
|
||||
|
||||
private class AssignmentTuplePatternRange extends TuplePatternRange {
|
||||
override Generated::DestructuredLeftAssignment generated;
|
||||
|
||||
override Pattern getElement(int i) { result = generated.getChild(i) }
|
||||
override PatternRange getElement(int i) { result = generated.getChild(i) }
|
||||
}
|
||||
|
||||
private class AssignmentListPatternRange extends TuplePatternRange {
|
||||
override Generated::LeftAssignmentList generated;
|
||||
|
||||
override Pattern getElement(int i) { result = generated.getChild(i) }
|
||||
override PatternRange getElement(int i) { result = generated.getChild(i) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user