Merge branch 'main' into constants_scopes

This commit is contained in:
Arthur Baars
2021-02-11 17:00:50 +01:00
committed by GitHub
12 changed files with 236 additions and 95 deletions

View File

@@ -145,6 +145,14 @@ class ExprSequence extends Expr {
*/
class BodyStatement extends ExprSequence {
override BodyStatement::Range range;
/** Gets the `else` block in this block, if any. */
final ExprSequence getElse() { result = range.getElse() }
/** Gets the `ensure` block in this block, if any. */
final ExprSequence getEnsure() { result = range.getEnsure() }
final predicate hasEnsure() { exists(this.getEnsure()) }
}
/**

View File

@@ -56,14 +56,14 @@ class SingletonMethod extends Callable, BodyStatement, @singleton_method {
* -> (x) { x + 1 }
* ```
*/
class Lambda extends Callable, @lambda {
class Lambda extends Callable, BodyStatement, @lambda {
final override Lambda::Range range;
final override string getAPrimaryQlClass() { result = "Lambda" }
}
/** A block. */
class Block extends Callable {
class Block extends Callable, ExprSequence {
override Block::Range range;
}

View File

@@ -33,8 +33,6 @@ module AstNode {
this = any(Generated::Call c).getMethod() and
not this instanceof Generated::ScopeResolution
or
this instanceof Generated::Ensure
or
this instanceof Generated::Rescue
or
this instanceof Generated::RestAssignment

View File

@@ -185,7 +185,25 @@ module ExprSequence {
}
module BodyStatement {
abstract class Range extends ExprSequence::Range { }
abstract class Range extends ExprSequence::Range {
final override Expr getExpr(int n) {
result =
rank[n + 1](Generated::AstNode node, int i |
node = getChild(i) and
not node instanceof Generated::Else and
not node instanceof Generated::Rescue and
not node instanceof Generated::Ensure
|
node order by i
)
}
final ExprSequence getElse() { result = unique(Generated::Else s | s = getChild(_)) }
final ExprSequence getEnsure() { result = unique(Generated::Ensure s | s = getChild(_)) }
abstract Generated::AstNode getChild(int i);
}
}
module ParenthesizedExpr {
@@ -228,6 +246,16 @@ module DoExpr {
}
}
module Ensure {
class Range extends ExprSequence::Range, @ensure {
final override Generated::Ensure generated;
final override Expr getExpr(int n) { result = generated.getChild(n) }
final override string toString() { result = "ensure ... end" }
}
}
module Pair {
class Range extends Expr::Range, @pair {
final override Generated::Pair generated;

View File

@@ -23,7 +23,7 @@ module Method {
final predicate isSetter() { generated.getName() instanceof Generated::Setter }
final override Expr getExpr(int i) { result = generated.getChild(i) }
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string toString() { result = this.getName() }
}
@@ -41,33 +41,40 @@ module SingletonMethod {
result = generated.getName().(Generated::Setter).getName().getValue() + "="
}
final override Expr getExpr(int i) { result = generated.getChild(i) }
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string toString() { result = this.getName() }
}
}
module Lambda {
class Range extends Callable::Range, @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 Generated::AstNode getChild(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 { }
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 Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override Parameter::Range getParameter(int n) {
result = generated.getParameters().getChild(n)
@@ -85,6 +92,8 @@ module BraceBlock {
result = generated.getParameters().getChild(n)
}
final override Expr getExpr(int i) { result = generated.getChild(i) }
final override string toString() { result = "{ ... }" }
}
}

View File

@@ -11,7 +11,7 @@ module Class {
class Range extends ModuleBase::Range, ConstantWriteAccess::Range, @class {
final override Generated::Class generated;
final override Expr getExpr(int i) { result = generated.getChild(i) }
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string getName() {
result = generated.getName().(Generated::Token).getValue() or
@@ -40,7 +40,7 @@ module SingletonClass {
class Range extends ModuleBase::Range, @singleton_class {
final override Generated::SingletonClass generated;
final override Expr getExpr(int i) { result = generated.getChild(i) }
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final Expr getValue() { result = generated.getValue() }
@@ -52,7 +52,7 @@ module Module {
class Range extends ModuleBase::Range, ConstantWriteAccess::Range, @module {
final override Generated::Module generated;
final override Expr getExpr(int n) { result = generated.getChild(n) }
final override Generated::AstNode getChild(int i) { result = generated.getChild(i) }
final override string getName() {
result = generated.getName().(Generated::Token).getValue() or