mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
Add ConstantAccess class
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import codeql.Locations
|
||||
import ast.Call
|
||||
import ast.Control
|
||||
import ast.Constant
|
||||
import ast.Expr
|
||||
import ast.Method
|
||||
import ast.Module
|
||||
|
||||
96
ql/src/codeql_ruby/ast/Constant.qll
Normal file
96
ql/src/codeql_ruby/ast/Constant.qll
Normal file
@@ -0,0 +1,96 @@
|
||||
private import codeql_ruby.AST
|
||||
private import internal.Constant
|
||||
|
||||
/** An access to a constant. */
|
||||
class ConstantAccess extends Expr {
|
||||
override ConstantAccess::Range range;
|
||||
|
||||
/** Gets the name of the constant being accessed. */
|
||||
string getName() { result = range.getName() }
|
||||
|
||||
/**
|
||||
* Gets the expression used in the access's scope resolution operation, if
|
||||
* any. In the following example, the result is the `Call` expression for
|
||||
* `foo()`.
|
||||
*
|
||||
* ```rb
|
||||
* foo()::MESSAGE
|
||||
* ```
|
||||
*
|
||||
* However, there is no result for the following example, since there is no
|
||||
* scope resolution operation.
|
||||
*
|
||||
* ```rb
|
||||
* MESSAGE
|
||||
* ```
|
||||
*/
|
||||
Expr getScopeExpr() { result = range.getScopeExpr() }
|
||||
|
||||
/**
|
||||
* Holds if the access uses the scope resolution operator to refer to the
|
||||
* global scope, as in this example:
|
||||
*
|
||||
* ```rb
|
||||
* ::MESSAGE
|
||||
* ```
|
||||
*/
|
||||
predicate hasGlobalScope() { range.hasGlobalScope() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A use (read) of a constant.
|
||||
*
|
||||
* For example, the right-hand side of the assignment in:
|
||||
*
|
||||
* ```rb
|
||||
* x = Foo
|
||||
* ```
|
||||
*
|
||||
* Or the superclass `Bar` in this example:
|
||||
*
|
||||
* ```rb
|
||||
* class Foo < Bar
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
class ConstantReadAccess extends ConstantAccess {
|
||||
final override ConstantReadAccess::Range range;
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "ConstantReadAccess" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A definition of a constant.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* ```rb
|
||||
* Foo = 1 # defines constant Foo as an integer
|
||||
* M::Foo = 1 # defines constant Foo as an integer in module M
|
||||
*
|
||||
* class Bar; end # defines constant Bar as a class
|
||||
* class M::Bar; end # defines constant Bar as a class in module M
|
||||
*
|
||||
* module Baz; end # defines constant Baz as a module
|
||||
* module M::Baz; end # defines constant Baz as a module in module M
|
||||
* ```
|
||||
*/
|
||||
class ConstantWriteAccess extends ConstantAccess {
|
||||
override ConstantWriteAccess::Range range;
|
||||
|
||||
override string getAPrimaryQlClass() { result = "ConstantWriteAccess" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A definition of a constant via assignment. For example, the left-hand
|
||||
* operand in the following example:
|
||||
*
|
||||
* ```rb
|
||||
* MAX_SIZE = 100
|
||||
* ```
|
||||
*/
|
||||
class ConstantAssignment extends ConstantWriteAccess {
|
||||
override ConstantAssignment::Range range;
|
||||
|
||||
override string getAPrimaryQlClass() { result = "ConstantAssignment" }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
private import codeql_ruby.AST
|
||||
private import codeql_ruby.ast.Constant
|
||||
private import internal.Module
|
||||
|
||||
/**
|
||||
@@ -36,7 +37,7 @@ class ModuleBase extends BodyStatement {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
class Class extends ModuleBase {
|
||||
class Class extends ModuleBase, ConstantWriteAccess {
|
||||
final override Class::Range range;
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "Class" }
|
||||
@@ -50,13 +51,14 @@ class Class extends ModuleBase {
|
||||
* ```
|
||||
*
|
||||
* N.B. in the following example, where the class name uses the scope
|
||||
* resolution operator, the result is the name being resolved, i.e. `"Bar"`. Use `getNameScopeExpr` to get the `Foo` for `Foo`.
|
||||
* resolution operator, the result is the name being resolved, i.e. `"Bar"`.
|
||||
* Use `getScopeExpr` to get the `Foo` for `Foo`.
|
||||
* ```rb
|
||||
* class Foo::Bar
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final string getName() { result = range.getName() }
|
||||
final override string getName() { result = range.getName() }
|
||||
|
||||
/**
|
||||
* Gets the scope expression used in the class name's scope resolution
|
||||
@@ -77,7 +79,7 @@ class Class extends ModuleBase {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final Expr getNameScopeExpr() { result = range.getNameScopeExpr() }
|
||||
final override Expr getScopeExpr() { result = range.getScopeExpr() }
|
||||
|
||||
/**
|
||||
* Holds if the class name uses the scope resolution operator to access the
|
||||
@@ -88,15 +90,19 @@ class Class extends ModuleBase {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final predicate nameHasGlobalScope() { range.nameHasGlobalScope() }
|
||||
final override predicate hasGlobalScope() { range.hasGlobalScope() }
|
||||
|
||||
/**
|
||||
* Gets the `Expr` used as the superclass in the class definition, if any.
|
||||
*
|
||||
* TODO: add example for `class A < Foo` once we have `ConstantAccess`
|
||||
* In the following example, the result is a `ConstantReadAccess`.
|
||||
* ```rb
|
||||
* class Foo < Bar
|
||||
* end
|
||||
* ```
|
||||
*
|
||||
* For example, where the superclass is a call expression, the result is a
|
||||
* `Call`.
|
||||
* In the following example, where the superclass is a call expression, the
|
||||
* result is a `Call`.
|
||||
* ```rb
|
||||
* class C < foo()
|
||||
* end
|
||||
@@ -158,7 +164,7 @@ class SingletonClass extends ModuleBase, @singleton_class {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
class Module extends ModuleBase, @module {
|
||||
class Module extends ModuleBase, ConstantWriteAccess, @module {
|
||||
final override Module::Range range;
|
||||
|
||||
final override string getAPrimaryQlClass() { result = "Module" }
|
||||
@@ -172,13 +178,14 @@ class Module extends ModuleBase, @module {
|
||||
* ```
|
||||
*
|
||||
* N.B. in the following example, where the module name uses the scope
|
||||
* resolution operator, the result is the name being resolved, i.e. `"Bar"`. Use `getNameScopeExpr` to get the `Expr` for `Foo`.
|
||||
* resolution operator, the result is the name being resolved, i.e. `"Bar"`.
|
||||
* Use `getScopeExpr` to get the `Expr` for `Foo`.
|
||||
* ```rb
|
||||
* module Foo::Bar
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final string getName() { result = range.getName() }
|
||||
final override string getName() { result = range.getName() }
|
||||
|
||||
/**
|
||||
* Gets the scope expression used in the module name's scope resolution
|
||||
@@ -199,7 +206,7 @@ class Module extends ModuleBase, @module {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final Expr getNameScopeExpr() { result = range.getNameScopeExpr() }
|
||||
final override Expr getScopeExpr() { result = range.getScopeExpr() }
|
||||
|
||||
/**
|
||||
* Holds if the module name uses the scope resolution operator to access the
|
||||
@@ -210,5 +217,5 @@ class Module extends ModuleBase, @module {
|
||||
* end
|
||||
* ```
|
||||
*/
|
||||
final predicate nameHasGlobalScope() { range.nameHasGlobalScope() }
|
||||
final override predicate hasGlobalScope() { range.hasGlobalScope() }
|
||||
}
|
||||
|
||||
@@ -37,8 +37,6 @@ module AstNode {
|
||||
or
|
||||
this instanceof Generated::Rescue
|
||||
or
|
||||
this instanceof Generated::Constant
|
||||
or
|
||||
this instanceof Generated::RestAssignment
|
||||
or
|
||||
this = any(Generated::RestAssignment ra).getChild()
|
||||
|
||||
89
ql/src/codeql_ruby/ast/internal/Constant.qll
Normal file
89
ql/src/codeql_ruby/ast/internal/Constant.qll
Normal file
@@ -0,0 +1,89 @@
|
||||
private import codeql_ruby.ast.internal.Expr
|
||||
private import codeql_ruby.ast.internal.Pattern
|
||||
private import codeql_ruby.ast.internal.TreeSitter
|
||||
private import codeql_ruby.ast.internal.Variable
|
||||
|
||||
module ConstantAccess {
|
||||
abstract class Range extends Expr::Range {
|
||||
override string toString() { result = this.getName() }
|
||||
|
||||
abstract string getName();
|
||||
|
||||
abstract Expr::Range getScopeExpr();
|
||||
|
||||
abstract predicate hasGlobalScope();
|
||||
}
|
||||
}
|
||||
|
||||
module ConstantReadAccess {
|
||||
abstract class Range extends ConstantAccess::Range { }
|
||||
|
||||
private class TokenConstantReadAccessRange extends ConstantReadAccess::Range, @token_constant {
|
||||
final override Generated::Constant generated;
|
||||
|
||||
// A tree-sitter `constant` token is a read of that constant in any context
|
||||
// where an identifier would be a vcall.
|
||||
TokenConstantReadAccessRange() { vcall(this) }
|
||||
|
||||
final override string getName() { result = generated.getValue() }
|
||||
|
||||
final override Expr::Range getScopeExpr() { none() }
|
||||
|
||||
final override predicate hasGlobalScope() { none() }
|
||||
}
|
||||
|
||||
private class ScopeResolutionReadAccessRange extends ConstantReadAccess::Range, @scope_resolution {
|
||||
final override Generated::ScopeResolution generated;
|
||||
Generated::Constant constant;
|
||||
|
||||
// A tree-sitter `scope_resolution` node with a `constant` name field is a
|
||||
// read of that constant in any context where an identifier would be a
|
||||
// vcall.
|
||||
ScopeResolutionReadAccessRange() {
|
||||
constant = generated.getName() and
|
||||
vcall(this)
|
||||
}
|
||||
|
||||
final override string getName() { result = constant.getValue() }
|
||||
|
||||
final override Expr::Range getScopeExpr() { result = generated.getScope() }
|
||||
|
||||
final override predicate hasGlobalScope() { not exists(generated.getScope()) }
|
||||
}
|
||||
}
|
||||
|
||||
module ConstantWriteAccess {
|
||||
abstract class Range extends ConstantAccess::Range { }
|
||||
}
|
||||
|
||||
module ConstantAssignment {
|
||||
abstract class Range extends ConstantWriteAccess::Range { }
|
||||
|
||||
private class TokenConstantAssignmentRange extends ConstantAssignment::Range, @token_constant {
|
||||
final override Generated::Constant generated;
|
||||
|
||||
TokenConstantAssignmentRange() { explicitAssignmentNode(this, _) }
|
||||
|
||||
final override string getName() { result = generated.getValue() }
|
||||
|
||||
final override Expr::Range getScopeExpr() { none() }
|
||||
|
||||
final override predicate hasGlobalScope() { none() }
|
||||
}
|
||||
|
||||
private class ScopeResolutionAssignmentRange extends ConstantAssignment::Range, @scope_resolution {
|
||||
final override Generated::ScopeResolution generated;
|
||||
Generated::Constant constant;
|
||||
|
||||
ScopeResolutionAssignmentRange() {
|
||||
constant = generated.getName() and
|
||||
explicitAssignmentNode(this, _)
|
||||
}
|
||||
|
||||
final override string getName() { result = constant.getValue() }
|
||||
|
||||
final override Expr::Range getScopeExpr() { result = generated.getScope() }
|
||||
|
||||
final override predicate hasGlobalScope() { not exists(generated.getScope()) }
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
private import codeql_ruby.AST
|
||||
private import codeql_ruby.ast.internal.AST
|
||||
private import codeql_ruby.ast.internal.Pattern
|
||||
private import codeql_ruby.ast.internal.TreeSitter
|
||||
private import codeql_ruby.ast.internal.Variable
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
private import codeql_ruby.AST
|
||||
private import codeql_ruby.ast.internal.Constant
|
||||
private import codeql_ruby.ast.internal.Expr
|
||||
private import codeql_ruby.ast.internal.TreeSitter
|
||||
|
||||
@@ -7,22 +8,22 @@ module ModuleBase {
|
||||
}
|
||||
|
||||
module Class {
|
||||
class Range extends ModuleBase::Range, @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 string getName() {
|
||||
final override string getName() {
|
||||
result = generated.getName().(Generated::Token).getValue() or
|
||||
result =
|
||||
generated.getName().(Generated::ScopeResolution).getName().(Generated::Token).getValue()
|
||||
}
|
||||
|
||||
final Expr getNameScopeExpr() {
|
||||
final override Expr::Range getScopeExpr() {
|
||||
result = generated.getName().(Generated::ScopeResolution).getScope()
|
||||
}
|
||||
|
||||
final predicate nameHasGlobalScope() {
|
||||
final override predicate hasGlobalScope() {
|
||||
exists(Generated::ScopeResolution sr |
|
||||
sr = generated.getName() and
|
||||
not exists(sr.getScope())
|
||||
@@ -48,22 +49,22 @@ module SingletonClass {
|
||||
}
|
||||
|
||||
module Module {
|
||||
class Range extends ModuleBase::Range, @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 string getName() {
|
||||
final override string getName() {
|
||||
result = generated.getName().(Generated::Token).getValue() or
|
||||
result =
|
||||
generated.getName().(Generated::ScopeResolution).getName().(Generated::Token).getValue()
|
||||
}
|
||||
|
||||
final Expr getNameScopeExpr() {
|
||||
final override Expr::Range getScopeExpr() {
|
||||
result = generated.getName().(Generated::ScopeResolution).getScope()
|
||||
}
|
||||
|
||||
final predicate nameHasGlobalScope() {
|
||||
final override predicate hasGlobalScope() {
|
||||
exists(Generated::ScopeResolution sr |
|
||||
sr = generated.getName() and
|
||||
not exists(sr.getScope())
|
||||
|
||||
@@ -166,7 +166,8 @@ private module Cached {
|
||||
}
|
||||
|
||||
// Db types that can be vcalls
|
||||
private class VcallToken = @scope_resolution or @token_identifier or @token_super;
|
||||
private class VcallToken =
|
||||
@scope_resolution or @token_constant or @token_identifier or @token_super;
|
||||
|
||||
/**
|
||||
* Holds if `i` is an `identifier` node occurring in the context where it
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
blockArguments
|
||||
| calls.rb:268:5:268:8 | &... | calls.rb:268:6:268:8 | call to bar |
|
||||
| calls.rb:269:5:269:11 | &... | calls.rb:269:6:269:11 | call to bar |
|
||||
| calls.rb:266:5:266:8 | &... | calls.rb:266:6:266:8 | call to bar |
|
||||
| calls.rb:267:5:267:11 | &... | calls.rb:267:6:267:11 | call to bar |
|
||||
splatArguments
|
||||
| calls.rb:272:5:272:8 | *... | calls.rb:272:6:272:8 | call to bar |
|
||||
| calls.rb:273:5:273:11 | *... | calls.rb:273:6:273:11 | call to bar |
|
||||
| calls.rb:270:5:270:8 | *... | calls.rb:270:6:270:8 | call to bar |
|
||||
| calls.rb:271:5:271:11 | *... | calls.rb:271:6:271:11 | call to bar |
|
||||
hashSplatArguments
|
||||
| calls.rb:276:5:276:9 | **... | calls.rb:276:7:276:9 | call to bar |
|
||||
| calls.rb:277:5:277:12 | **... | calls.rb:277:7:277:12 | call to bar |
|
||||
| calls.rb:274:5:274:9 | **... | calls.rb:274:7:274:9 | call to bar |
|
||||
| calls.rb:275:5:275:12 | **... | calls.rb:275:7:275:12 | call to bar |
|
||||
keywordArguments
|
||||
| calls.rb:280:5:280:13 | Pair | calls.rb:280:5:280:8 | :blah | calls.rb:280:11:280:13 | call to bar |
|
||||
| calls.rb:281:5:281:16 | Pair | calls.rb:281:5:281:8 | :blah | calls.rb:281:11:281:16 | call to bar |
|
||||
| calls.rb:278:5:278:13 | Pair | calls.rb:278:5:278:8 | :blah | calls.rb:278:11:278:13 | call to bar |
|
||||
| calls.rb:279:5:279:16 | Pair | calls.rb:279:5:279:8 | :blah | calls.rb:279:11:279:16 | call to bar |
|
||||
keywordArgumentsByKeyword
|
||||
| calls.rb:280:1:280:14 | call to foo | blah | calls.rb:280:11:280:13 | call to bar |
|
||||
| calls.rb:281:1:281:17 | call to foo | blah | calls.rb:281:11:281:16 | call to bar |
|
||||
| calls.rb:278:1:278:14 | call to foo | blah | calls.rb:278:11:278:13 | call to bar |
|
||||
| calls.rb:279:1:279:17 | call to foo | blah | calls.rb:279:11:279:16 | call to bar |
|
||||
|
||||
@@ -51,99 +51,166 @@ callsWithNoReceiverArgumentsOrBlock
|
||||
| calls.rb:138:3:138:8 | call to bar | bar |
|
||||
| calls.rb:142:5:142:7 | call to foo | foo |
|
||||
| calls.rb:143:3:143:5 | call to bar | bar |
|
||||
| calls.rb:146:3:146:8 | call to bar | bar |
|
||||
| calls.rb:150:40:150:42 | call to foo | foo |
|
||||
| calls.rb:152:41:152:46 | call to foo | foo |
|
||||
| calls.rb:156:40:156:42 | call to foo | foo |
|
||||
| calls.rb:158:41:158:46 | call to foo | foo |
|
||||
| calls.rb:163:3:163:5 | call to foo | foo |
|
||||
| calls.rb:164:3:164:8 | call to bar | bar |
|
||||
| calls.rb:168:1:168:3 | call to foo | foo |
|
||||
| calls.rb:168:7:168:9 | call to bar | bar |
|
||||
| calls.rb:168:13:168:15 | call to baz | baz |
|
||||
| calls.rb:169:1:169:6 | call to foo | foo |
|
||||
| calls.rb:169:10:169:15 | call to bar | bar |
|
||||
| calls.rb:169:19:169:24 | call to baz | baz |
|
||||
| calls.rb:172:4:172:6 | call to foo | foo |
|
||||
| calls.rb:173:3:173:8 | call to wibble | wibble |
|
||||
| calls.rb:174:7:174:9 | call to bar | bar |
|
||||
| calls.rb:175:3:175:8 | call to wobble | wobble |
|
||||
| calls.rb:177:3:177:8 | call to wabble | wabble |
|
||||
| calls.rb:179:4:179:9 | call to foo | foo |
|
||||
| calls.rb:180:3:180:11 | call to wibble | wibble |
|
||||
| calls.rb:181:7:181:12 | call to bar | bar |
|
||||
| calls.rb:182:3:182:11 | call to wobble | wobble |
|
||||
| calls.rb:184:3:184:11 | call to wabble | wabble |
|
||||
| calls.rb:188:1:188:3 | call to bar | bar |
|
||||
| calls.rb:188:8:188:10 | call to foo | foo |
|
||||
| calls.rb:189:1:189:6 | call to bar | bar |
|
||||
| calls.rb:189:11:189:16 | call to foo | foo |
|
||||
| calls.rb:192:8:192:10 | call to foo | foo |
|
||||
| calls.rb:193:3:193:5 | call to bar | bar |
|
||||
| calls.rb:195:8:195:13 | call to foo | foo |
|
||||
| calls.rb:196:3:196:8 | call to bar | bar |
|
||||
| calls.rb:200:1:200:3 | call to bar | bar |
|
||||
| calls.rb:200:12:200:14 | call to foo | foo |
|
||||
| calls.rb:201:1:201:6 | call to bar | bar |
|
||||
| calls.rb:201:15:201:20 | call to foo | foo |
|
||||
| calls.rb:204:7:204:9 | call to foo | foo |
|
||||
| calls.rb:205:3:205:5 | call to bar | bar |
|
||||
| calls.rb:207:7:207:12 | call to foo | foo |
|
||||
| calls.rb:208:3:208:8 | call to bar | bar |
|
||||
| calls.rb:212:1:212:3 | call to bar | bar |
|
||||
| calls.rb:212:11:212:13 | call to foo | foo |
|
||||
| calls.rb:213:1:213:6 | call to bar | bar |
|
||||
| calls.rb:213:14:213:19 | call to foo | foo |
|
||||
| calls.rb:216:7:216:9 | call to foo | foo |
|
||||
| calls.rb:217:3:217:5 | call to bar | bar |
|
||||
| calls.rb:219:7:219:12 | call to foo | foo |
|
||||
| calls.rb:220:3:220:8 | call to bar | bar |
|
||||
| calls.rb:224:1:224:3 | call to bar | bar |
|
||||
| calls.rb:224:11:224:13 | call to foo | foo |
|
||||
| calls.rb:225:1:225:6 | call to bar | bar |
|
||||
| calls.rb:225:14:225:19 | call to foo | foo |
|
||||
| calls.rb:228:10:228:12 | call to bar | bar |
|
||||
| calls.rb:229:3:229:5 | call to baz | baz |
|
||||
| calls.rb:231:10:231:15 | call to bar | bar |
|
||||
| calls.rb:232:3:232:8 | call to baz | baz |
|
||||
| calls.rb:236:1:236:3 | call to foo | foo |
|
||||
| calls.rb:236:5:236:7 | call to bar | bar |
|
||||
| calls.rb:237:1:237:6 | call to foo | foo |
|
||||
| calls.rb:237:8:237:13 | call to bar | bar |
|
||||
| calls.rb:240:8:240:10 | call to bar | bar |
|
||||
| calls.rb:240:15:240:20 | call to baz | baz |
|
||||
| calls.rb:243:1:243:3 | call to foo | foo |
|
||||
| calls.rb:244:1:244:6 | call to foo | foo |
|
||||
| calls.rb:247:1:247:3 | call to foo | foo |
|
||||
| calls.rb:247:6:247:8 | call to bar | bar |
|
||||
| calls.rb:248:1:248:6 | call to foo | foo |
|
||||
| calls.rb:248:9:248:14 | call to bar | bar |
|
||||
| calls.rb:251:3:251:5 | call to foo | foo |
|
||||
| calls.rb:251:10:251:12 | call to bar | bar |
|
||||
| calls.rb:251:15:251:20 | call to foo | foo |
|
||||
| calls.rb:251:25:251:30 | call to bar | bar |
|
||||
| calls.rb:255:8:255:10 | call to foo | foo |
|
||||
| calls.rb:256:8:256:10 | call to bar | bar |
|
||||
| calls.rb:259:8:259:13 | call to foo | foo |
|
||||
| calls.rb:260:8:260:13 | call to bar | bar |
|
||||
| calls.rb:264:1:264:3 | call to foo | foo |
|
||||
| calls.rb:264:12:264:14 | call to bar | bar |
|
||||
| calls.rb:265:1:265:6 | call to foo | foo |
|
||||
| calls.rb:265:15:265:20 | call to bar | bar |
|
||||
| calls.rb:268:6:268:8 | call to bar | bar |
|
||||
| calls.rb:269:6:269:11 | call to bar | bar |
|
||||
| calls.rb:272:6:272:8 | call to bar | bar |
|
||||
| calls.rb:273:6:273:11 | call to bar | bar |
|
||||
| calls.rb:276:7:276:9 | call to bar | bar |
|
||||
| calls.rb:277:7:277:12 | call to bar | bar |
|
||||
| calls.rb:280:11:280:13 | call to bar | bar |
|
||||
| calls.rb:281:11:281:16 | call to bar | bar |
|
||||
| calls.rb:288:5:288:9 | call to super | super |
|
||||
| calls.rb:289:5:289:11 | call to super | super |
|
||||
| calls.rb:305:5:305:7 | call to foo | foo |
|
||||
| calls.rb:306:5:306:14 | call to super | super |
|
||||
| calls.rb:307:5:307:9 | call to super | super |
|
||||
| calls.rb:144:3:144:8 | call to baz | baz |
|
||||
| calls.rb:148:40:148:42 | call to foo | foo |
|
||||
| calls.rb:150:41:150:46 | call to foo | foo |
|
||||
| calls.rb:154:40:154:42 | call to foo | foo |
|
||||
| calls.rb:156:41:156:46 | call to foo | foo |
|
||||
| calls.rb:161:3:161:5 | call to foo | foo |
|
||||
| calls.rb:162:3:162:8 | call to bar | bar |
|
||||
| calls.rb:166:1:166:3 | call to foo | foo |
|
||||
| calls.rb:166:7:166:9 | call to bar | bar |
|
||||
| calls.rb:166:13:166:15 | call to baz | baz |
|
||||
| calls.rb:167:1:167:6 | call to foo | foo |
|
||||
| calls.rb:167:10:167:15 | call to bar | bar |
|
||||
| calls.rb:167:19:167:24 | call to baz | baz |
|
||||
| calls.rb:170:4:170:6 | call to foo | foo |
|
||||
| calls.rb:171:3:171:8 | call to wibble | wibble |
|
||||
| calls.rb:172:7:172:9 | call to bar | bar |
|
||||
| calls.rb:173:3:173:8 | call to wobble | wobble |
|
||||
| calls.rb:175:3:175:8 | call to wabble | wabble |
|
||||
| calls.rb:177:4:177:9 | call to foo | foo |
|
||||
| calls.rb:178:3:178:11 | call to wibble | wibble |
|
||||
| calls.rb:179:7:179:12 | call to bar | bar |
|
||||
| calls.rb:180:3:180:11 | call to wobble | wobble |
|
||||
| calls.rb:182:3:182:11 | call to wabble | wabble |
|
||||
| calls.rb:186:1:186:3 | call to bar | bar |
|
||||
| calls.rb:186:8:186:10 | call to foo | foo |
|
||||
| calls.rb:187:1:187:6 | call to bar | bar |
|
||||
| calls.rb:187:11:187:16 | call to foo | foo |
|
||||
| calls.rb:190:8:190:10 | call to foo | foo |
|
||||
| calls.rb:191:3:191:5 | call to bar | bar |
|
||||
| calls.rb:193:8:193:13 | call to foo | foo |
|
||||
| calls.rb:194:3:194:8 | call to bar | bar |
|
||||
| calls.rb:198:1:198:3 | call to bar | bar |
|
||||
| calls.rb:198:12:198:14 | call to foo | foo |
|
||||
| calls.rb:199:1:199:6 | call to bar | bar |
|
||||
| calls.rb:199:15:199:20 | call to foo | foo |
|
||||
| calls.rb:202:7:202:9 | call to foo | foo |
|
||||
| calls.rb:203:3:203:5 | call to bar | bar |
|
||||
| calls.rb:205:7:205:12 | call to foo | foo |
|
||||
| calls.rb:206:3:206:8 | call to bar | bar |
|
||||
| calls.rb:210:1:210:3 | call to bar | bar |
|
||||
| calls.rb:210:11:210:13 | call to foo | foo |
|
||||
| calls.rb:211:1:211:6 | call to bar | bar |
|
||||
| calls.rb:211:14:211:19 | call to foo | foo |
|
||||
| calls.rb:214:7:214:9 | call to foo | foo |
|
||||
| calls.rb:215:3:215:5 | call to bar | bar |
|
||||
| calls.rb:217:7:217:12 | call to foo | foo |
|
||||
| calls.rb:218:3:218:8 | call to bar | bar |
|
||||
| calls.rb:222:1:222:3 | call to bar | bar |
|
||||
| calls.rb:222:11:222:13 | call to foo | foo |
|
||||
| calls.rb:223:1:223:6 | call to bar | bar |
|
||||
| calls.rb:223:14:223:19 | call to foo | foo |
|
||||
| calls.rb:226:10:226:12 | call to bar | bar |
|
||||
| calls.rb:227:3:227:5 | call to baz | baz |
|
||||
| calls.rb:229:10:229:15 | call to bar | bar |
|
||||
| calls.rb:230:3:230:8 | call to baz | baz |
|
||||
| calls.rb:234:1:234:3 | call to foo | foo |
|
||||
| calls.rb:234:5:234:7 | call to bar | bar |
|
||||
| calls.rb:235:1:235:6 | call to foo | foo |
|
||||
| calls.rb:235:8:235:13 | call to bar | bar |
|
||||
| calls.rb:238:8:238:10 | call to bar | bar |
|
||||
| calls.rb:238:15:238:20 | call to baz | baz |
|
||||
| calls.rb:241:1:241:3 | call to foo | foo |
|
||||
| calls.rb:242:1:242:6 | call to foo | foo |
|
||||
| calls.rb:245:1:245:3 | call to foo | foo |
|
||||
| calls.rb:245:6:245:8 | call to bar | bar |
|
||||
| calls.rb:246:1:246:6 | call to foo | foo |
|
||||
| calls.rb:246:9:246:14 | call to bar | bar |
|
||||
| calls.rb:249:3:249:5 | call to foo | foo |
|
||||
| calls.rb:249:10:249:12 | call to bar | bar |
|
||||
| calls.rb:249:15:249:20 | call to foo | foo |
|
||||
| calls.rb:249:25:249:30 | call to bar | bar |
|
||||
| calls.rb:253:8:253:10 | call to foo | foo |
|
||||
| calls.rb:254:8:254:10 | call to bar | bar |
|
||||
| calls.rb:257:8:257:13 | call to foo | foo |
|
||||
| calls.rb:258:8:258:13 | call to bar | bar |
|
||||
| calls.rb:262:1:262:3 | call to foo | foo |
|
||||
| calls.rb:262:12:262:14 | call to bar | bar |
|
||||
| calls.rb:263:1:263:6 | call to foo | foo |
|
||||
| calls.rb:263:15:263:20 | call to bar | bar |
|
||||
| calls.rb:266:6:266:8 | call to bar | bar |
|
||||
| calls.rb:267:6:267:11 | call to bar | bar |
|
||||
| calls.rb:270:6:270:8 | call to bar | bar |
|
||||
| calls.rb:271:6:271:11 | call to bar | bar |
|
||||
| calls.rb:274:7:274:9 | call to bar | bar |
|
||||
| calls.rb:275:7:275:12 | call to bar | bar |
|
||||
| calls.rb:278:11:278:13 | call to bar | bar |
|
||||
| calls.rb:279:11:279:16 | call to bar | bar |
|
||||
| calls.rb:286:5:286:9 | call to super | super |
|
||||
| calls.rb:287:5:287:11 | call to super | super |
|
||||
| calls.rb:303:5:303:7 | call to foo | foo |
|
||||
| calls.rb:304:5:304:14 | call to super | super |
|
||||
| calls.rb:305:5:305:9 | call to super | super |
|
||||
callsWithNameScopeExpr
|
||||
| calls.rb:5:1:5:10 | call to bar | calls.rb:5:1:5:3 | Foo |
|
||||
| calls.rb:47:1:47:6 | call to foo | calls.rb:47:1:47:1 | X |
|
||||
| calls.rb:51:2:51:7 | call to foo | calls.rb:51:2:51:2 | X |
|
||||
| calls.rb:55:11:55:16 | call to foo | calls.rb:55:11:55:11 | X |
|
||||
| calls.rb:59:2:59:7 | call to foo | calls.rb:59:2:59:2 | X |
|
||||
| calls.rb:63:8:63:13 | call to foo | calls.rb:63:8:63:8 | X |
|
||||
| calls.rb:67:9:67:14 | call to bar | calls.rb:67:9:67:9 | X |
|
||||
| calls.rb:70:13:70:18 | call to bar | calls.rb:70:13:70:13 | X |
|
||||
| calls.rb:75:3:75:8 | call to foo | calls.rb:75:3:75:3 | X |
|
||||
| calls.rb:79:14:79:19 | call to bar | calls.rb:79:14:79:14 | X |
|
||||
| calls.rb:82:12:82:17 | call to bar | calls.rb:82:12:82:12 | X |
|
||||
| calls.rb:85:7:85:12 | call to bar | calls.rb:85:7:85:7 | X |
|
||||
| calls.rb:89:2:89:7 | call to bar | calls.rb:89:2:89:2 | X |
|
||||
| calls.rb:92:14:92:19 | call to baz | calls.rb:92:14:92:14 | X |
|
||||
| calls.rb:97:3:97:8 | call to baz | calls.rb:97:3:97:3 | X |
|
||||
| calls.rb:110:6:110:11 | call to foo | calls.rb:110:6:110:6 | X |
|
||||
| calls.rb:111:6:111:11 | call to bar | calls.rb:111:6:111:6 | X |
|
||||
| calls.rb:112:3:112:8 | call to baz | calls.rb:112:3:112:3 | X |
|
||||
| calls.rb:118:3:118:8 | call to bar | calls.rb:118:3:118:3 | X |
|
||||
| calls.rb:124:18:124:23 | call to foo | calls.rb:124:18:124:18 | X |
|
||||
| calls.rb:131:10:131:15 | call to foo | calls.rb:131:10:131:10 | X |
|
||||
| calls.rb:132:3:132:8 | call to bar | calls.rb:132:3:132:3 | X |
|
||||
| calls.rb:138:3:138:8 | call to bar | calls.rb:138:3:138:3 | X |
|
||||
| calls.rb:144:3:144:8 | call to baz | calls.rb:144:3:144:3 | X |
|
||||
| calls.rb:150:41:150:46 | call to foo | calls.rb:150:41:150:41 | X |
|
||||
| calls.rb:156:41:156:46 | call to foo | calls.rb:156:41:156:41 | X |
|
||||
| calls.rb:162:3:162:8 | call to bar | calls.rb:162:3:162:3 | X |
|
||||
| calls.rb:167:1:167:6 | call to foo | calls.rb:167:1:167:1 | X |
|
||||
| calls.rb:167:10:167:15 | call to bar | calls.rb:167:10:167:10 | X |
|
||||
| calls.rb:167:19:167:24 | call to baz | calls.rb:167:19:167:19 | X |
|
||||
| calls.rb:177:4:177:9 | call to foo | calls.rb:177:4:177:4 | X |
|
||||
| calls.rb:178:3:178:11 | call to wibble | calls.rb:178:3:178:3 | X |
|
||||
| calls.rb:179:7:179:12 | call to bar | calls.rb:179:7:179:7 | X |
|
||||
| calls.rb:180:3:180:11 | call to wobble | calls.rb:180:3:180:3 | X |
|
||||
| calls.rb:182:3:182:11 | call to wabble | calls.rb:182:3:182:3 | X |
|
||||
| calls.rb:187:1:187:6 | call to bar | calls.rb:187:1:187:1 | X |
|
||||
| calls.rb:187:11:187:16 | call to foo | calls.rb:187:11:187:11 | X |
|
||||
| calls.rb:193:8:193:13 | call to foo | calls.rb:193:8:193:8 | X |
|
||||
| calls.rb:194:3:194:8 | call to bar | calls.rb:194:3:194:3 | X |
|
||||
| calls.rb:199:1:199:6 | call to bar | calls.rb:199:1:199:1 | X |
|
||||
| calls.rb:199:15:199:20 | call to foo | calls.rb:199:15:199:15 | X |
|
||||
| calls.rb:205:7:205:12 | call to foo | calls.rb:205:7:205:7 | X |
|
||||
| calls.rb:206:3:206:8 | call to bar | calls.rb:206:3:206:3 | X |
|
||||
| calls.rb:211:1:211:6 | call to bar | calls.rb:211:1:211:1 | X |
|
||||
| calls.rb:211:14:211:19 | call to foo | calls.rb:211:14:211:14 | X |
|
||||
| calls.rb:217:7:217:12 | call to foo | calls.rb:217:7:217:7 | X |
|
||||
| calls.rb:218:3:218:8 | call to bar | calls.rb:218:3:218:3 | X |
|
||||
| calls.rb:223:1:223:6 | call to bar | calls.rb:223:1:223:1 | X |
|
||||
| calls.rb:223:14:223:19 | call to foo | calls.rb:223:14:223:14 | X |
|
||||
| calls.rb:229:10:229:15 | call to bar | calls.rb:229:10:229:10 | X |
|
||||
| calls.rb:230:3:230:8 | call to baz | calls.rb:230:3:230:3 | X |
|
||||
| calls.rb:235:1:235:6 | call to foo | calls.rb:235:1:235:1 | X |
|
||||
| calls.rb:235:8:235:13 | call to bar | calls.rb:235:8:235:8 | X |
|
||||
| calls.rb:238:15:238:20 | call to baz | calls.rb:238:15:238:15 | X |
|
||||
| calls.rb:242:1:242:6 | call to foo | calls.rb:242:1:242:1 | X |
|
||||
| calls.rb:246:1:246:6 | call to foo | calls.rb:246:1:246:1 | X |
|
||||
| calls.rb:246:9:246:14 | call to bar | calls.rb:246:9:246:9 | X |
|
||||
| calls.rb:249:15:249:20 | call to foo | calls.rb:249:15:249:15 | X |
|
||||
| calls.rb:249:25:249:30 | call to bar | calls.rb:249:25:249:25 | X |
|
||||
| calls.rb:257:8:257:13 | call to foo | calls.rb:257:8:257:8 | X |
|
||||
| calls.rb:258:8:258:13 | call to bar | calls.rb:258:8:258:8 | X |
|
||||
| calls.rb:263:1:263:6 | call to foo | calls.rb:263:1:263:1 | X |
|
||||
| calls.rb:263:15:263:20 | call to bar | calls.rb:263:15:263:15 | X |
|
||||
| calls.rb:267:6:267:11 | call to bar | calls.rb:267:6:267:6 | X |
|
||||
| calls.rb:271:6:271:11 | call to bar | calls.rb:271:6:271:6 | X |
|
||||
| calls.rb:275:7:275:12 | call to bar | calls.rb:275:7:275:7 | X |
|
||||
| calls.rb:279:11:279:16 | call to bar | calls.rb:279:11:279:11 | X |
|
||||
callsWithGlobalNameScopeExpr
|
||||
| calls.rb:8:1:8:7 | call to bar |
|
||||
callsWithArguments
|
||||
@@ -155,63 +222,63 @@ callsWithArguments
|
||||
| calls.rb:36:3:36:16 | call to yield | yield | 1 | calls.rb:36:14:36:16 | 200 |
|
||||
| calls.rb:54:1:54:14 | call to some_func | some_func | 0 | calls.rb:54:11:54:13 | call to foo |
|
||||
| calls.rb:55:1:55:17 | call to some_func | some_func | 0 | calls.rb:55:11:55:16 | call to foo |
|
||||
| calls.rb:268:1:268:9 | call to foo | foo | 0 | calls.rb:268:5:268:8 | &... |
|
||||
| calls.rb:269:1:269:12 | call to foo | foo | 0 | calls.rb:269:5:269:11 | &... |
|
||||
| calls.rb:272:1:272:9 | call to foo | foo | 0 | calls.rb:272:5:272:8 | *... |
|
||||
| calls.rb:273:1:273:12 | call to foo | foo | 0 | calls.rb:273:5:273:11 | *... |
|
||||
| calls.rb:276:1:276:10 | call to foo | foo | 0 | calls.rb:276:5:276:9 | **... |
|
||||
| calls.rb:277:1:277:13 | call to foo | foo | 0 | calls.rb:277:5:277:12 | **... |
|
||||
| calls.rb:280:1:280:14 | call to foo | foo | 0 | calls.rb:280:5:280:13 | Pair |
|
||||
| calls.rb:281:1:281:17 | call to foo | foo | 0 | calls.rb:281:5:281:16 | Pair |
|
||||
| calls.rb:290:5:290:16 | call to super | super | 0 | calls.rb:290:11:290:16 | blah |
|
||||
| calls.rb:291:5:291:17 | call to super | super | 0 | calls.rb:291:11:291:11 | 1 |
|
||||
| calls.rb:291:5:291:17 | call to super | super | 1 | calls.rb:291:14:291:14 | 2 |
|
||||
| calls.rb:291:5:291:17 | call to super | super | 2 | calls.rb:291:17:291:17 | 3 |
|
||||
| calls.rb:294:5:294:30 | call to super | super | 0 | calls.rb:294:11:294:11 | 4 |
|
||||
| calls.rb:294:5:294:30 | call to super | super | 1 | calls.rb:294:14:294:14 | 5 |
|
||||
| calls.rb:295:5:295:33 | call to super | super | 0 | calls.rb:295:11:295:11 | 6 |
|
||||
| calls.rb:295:5:295:33 | call to super | super | 1 | calls.rb:295:14:295:14 | 7 |
|
||||
| calls.rb:266:1:266:9 | call to foo | foo | 0 | calls.rb:266:5:266:8 | &... |
|
||||
| calls.rb:267:1:267:12 | call to foo | foo | 0 | calls.rb:267:5:267:11 | &... |
|
||||
| calls.rb:270:1:270:9 | call to foo | foo | 0 | calls.rb:270:5:270:8 | *... |
|
||||
| calls.rb:271:1:271:12 | call to foo | foo | 0 | calls.rb:271:5:271:11 | *... |
|
||||
| calls.rb:274:1:274:10 | call to foo | foo | 0 | calls.rb:274:5:274:9 | **... |
|
||||
| calls.rb:275:1:275:13 | call to foo | foo | 0 | calls.rb:275:5:275:12 | **... |
|
||||
| calls.rb:278:1:278:14 | call to foo | foo | 0 | calls.rb:278:5:278:13 | Pair |
|
||||
| calls.rb:279:1:279:17 | call to foo | foo | 0 | calls.rb:279:5:279:16 | Pair |
|
||||
| calls.rb:288:5:288:16 | call to super | super | 0 | calls.rb:288:11:288:16 | blah |
|
||||
| calls.rb:289:5:289:17 | call to super | super | 0 | calls.rb:289:11:289:11 | 1 |
|
||||
| calls.rb:289:5:289:17 | call to super | super | 1 | calls.rb:289:14:289:14 | 2 |
|
||||
| calls.rb:289:5:289:17 | call to super | super | 2 | calls.rb:289:17:289:17 | 3 |
|
||||
| calls.rb:292:5:292:30 | call to super | super | 0 | calls.rb:292:11:292:11 | 4 |
|
||||
| calls.rb:292:5:292:30 | call to super | super | 1 | calls.rb:292:14:292:14 | 5 |
|
||||
| calls.rb:293:5:293:33 | call to super | super | 0 | calls.rb:293:11:293:11 | 6 |
|
||||
| calls.rb:293:5:293:33 | call to super | super | 1 | calls.rb:293:14:293:14 | 7 |
|
||||
callsWithReceiver
|
||||
| calls.rb:11:1:11:7 | call to bar | calls.rb:11:1:11:3 | 123 |
|
||||
| calls.rb:25:1:27:3 | call to bar | calls.rb:25:1:25:3 | 123 |
|
||||
| calls.rb:101:1:101:9 | call to bar | calls.rb:101:1:101:3 | call to foo |
|
||||
| calls.rb:102:1:102:9 | call to baz | calls.rb:102:1:102:3 | call to bar |
|
||||
| calls.rb:305:5:305:13 | call to super | calls.rb:305:5:305:7 | call to foo |
|
||||
| calls.rb:307:5:307:15 | call to super | calls.rb:307:5:307:9 | call to super |
|
||||
| calls.rb:303:5:303:13 | call to super | calls.rb:303:5:303:7 | call to foo |
|
||||
| calls.rb:305:5:305:15 | call to super | calls.rb:305:5:305:9 | call to super |
|
||||
callsWithBlock
|
||||
| calls.rb:17:1:17:17 | call to foo | calls.rb:17:5:17:17 | { ... } |
|
||||
| calls.rb:20:1:22:3 | call to foo | calls.rb:20:5:22:3 | do ... end |
|
||||
| calls.rb:25:1:27:3 | call to bar | calls.rb:25:16:27:3 | do ... end |
|
||||
| calls.rb:92:1:92:21 | call to foo | calls.rb:92:7:92:21 | { ... } |
|
||||
| calls.rb:95:1:98:3 | call to foo | calls.rb:95:7:98:3 | do ... end |
|
||||
| calls.rb:292:5:292:23 | call to super | calls.rb:292:11:292:23 | { ... } |
|
||||
| calls.rb:293:5:293:26 | call to super | calls.rb:293:11:293:26 | do ... end |
|
||||
| calls.rb:294:5:294:30 | call to super | calls.rb:294:16:294:30 | { ... } |
|
||||
| calls.rb:295:5:295:33 | call to super | calls.rb:295:16:295:33 | do ... end |
|
||||
| calls.rb:290:5:290:23 | call to super | calls.rb:290:11:290:23 | { ... } |
|
||||
| calls.rb:291:5:291:26 | call to super | calls.rb:291:11:291:26 | do ... end |
|
||||
| calls.rb:292:5:292:30 | call to super | calls.rb:292:16:292:30 | { ... } |
|
||||
| calls.rb:293:5:293:33 | call to super | calls.rb:293:16:293:33 | do ... end |
|
||||
yieldCalls
|
||||
| calls.rb:31:3:31:7 | call to yield |
|
||||
| calls.rb:36:3:36:16 | call to yield |
|
||||
superCalls
|
||||
| calls.rb:288:5:288:9 | call to super |
|
||||
| calls.rb:289:5:289:11 | call to super |
|
||||
| calls.rb:290:5:290:16 | call to super |
|
||||
| calls.rb:291:5:291:17 | call to super |
|
||||
| calls.rb:292:5:292:23 | call to super |
|
||||
| calls.rb:293:5:293:26 | call to super |
|
||||
| calls.rb:294:5:294:30 | call to super |
|
||||
| calls.rb:295:5:295:33 | call to super |
|
||||
| calls.rb:307:5:307:9 | call to super |
|
||||
| calls.rb:286:5:286:9 | call to super |
|
||||
| calls.rb:287:5:287:11 | call to super |
|
||||
| calls.rb:288:5:288:16 | call to super |
|
||||
| calls.rb:289:5:289:17 | call to super |
|
||||
| calls.rb:290:5:290:23 | call to super |
|
||||
| calls.rb:291:5:291:26 | call to super |
|
||||
| calls.rb:292:5:292:30 | call to super |
|
||||
| calls.rb:293:5:293:33 | call to super |
|
||||
| calls.rb:305:5:305:9 | call to super |
|
||||
superCallsWithArguments
|
||||
| calls.rb:290:5:290:16 | call to super | 0 | calls.rb:290:11:290:16 | blah |
|
||||
| calls.rb:291:5:291:17 | call to super | 0 | calls.rb:291:11:291:11 | 1 |
|
||||
| calls.rb:291:5:291:17 | call to super | 1 | calls.rb:291:14:291:14 | 2 |
|
||||
| calls.rb:291:5:291:17 | call to super | 2 | calls.rb:291:17:291:17 | 3 |
|
||||
| calls.rb:294:5:294:30 | call to super | 0 | calls.rb:294:11:294:11 | 4 |
|
||||
| calls.rb:294:5:294:30 | call to super | 1 | calls.rb:294:14:294:14 | 5 |
|
||||
| calls.rb:295:5:295:33 | call to super | 0 | calls.rb:295:11:295:11 | 6 |
|
||||
| calls.rb:295:5:295:33 | call to super | 1 | calls.rb:295:14:295:14 | 7 |
|
||||
| calls.rb:288:5:288:16 | call to super | 0 | calls.rb:288:11:288:16 | blah |
|
||||
| calls.rb:289:5:289:17 | call to super | 0 | calls.rb:289:11:289:11 | 1 |
|
||||
| calls.rb:289:5:289:17 | call to super | 1 | calls.rb:289:14:289:14 | 2 |
|
||||
| calls.rb:289:5:289:17 | call to super | 2 | calls.rb:289:17:289:17 | 3 |
|
||||
| calls.rb:292:5:292:30 | call to super | 0 | calls.rb:292:11:292:11 | 4 |
|
||||
| calls.rb:292:5:292:30 | call to super | 1 | calls.rb:292:14:292:14 | 5 |
|
||||
| calls.rb:293:5:293:33 | call to super | 0 | calls.rb:293:11:293:11 | 6 |
|
||||
| calls.rb:293:5:293:33 | call to super | 1 | calls.rb:293:14:293:14 | 7 |
|
||||
superCallsWithBlock
|
||||
| calls.rb:292:5:292:23 | call to super | calls.rb:292:11:292:23 | { ... } |
|
||||
| calls.rb:293:5:293:26 | call to super | calls.rb:293:11:293:26 | do ... end |
|
||||
| calls.rb:294:5:294:30 | call to super | calls.rb:294:16:294:30 | { ... } |
|
||||
| calls.rb:295:5:295:33 | call to super | calls.rb:295:16:295:33 | do ... end |
|
||||
| calls.rb:290:5:290:23 | call to super | calls.rb:290:11:290:23 | { ... } |
|
||||
| calls.rb:291:5:291:26 | call to super | calls.rb:291:11:291:26 | do ... end |
|
||||
| calls.rb:292:5:292:30 | call to super | calls.rb:292:16:292:30 | { ... } |
|
||||
| calls.rb:293:5:293:33 | call to super | calls.rb:293:16:293:33 | do ... end |
|
||||
|
||||
@@ -141,9 +141,7 @@ end
|
||||
# in a singleton method object or body
|
||||
def foo.some_method
|
||||
bar
|
||||
end
|
||||
def X::foo.some_method
|
||||
X::bar
|
||||
X::baz
|
||||
end
|
||||
|
||||
# in the default value for a keyword parameter
|
||||
|
||||
20
ql/test/library-tests/ast/constants/constants.expected
Normal file
20
ql/test/library-tests/ast/constants/constants.expected
Normal file
@@ -0,0 +1,20 @@
|
||||
| constants.rb:1:1:12:3 | ModuleA | write | ModuleA | Module |
|
||||
| constants.rb:2:5:3:7 | ClassA | write | ClassA | Class |
|
||||
| constants.rb:5:5:11:7 | ModuleB | write | ModuleB | Module |
|
||||
| constants.rb:6:9:7:11 | ClassB | write | ClassB | Class |
|
||||
| constants.rb:6:24:6:27 | Base | read | Base | ConstantReadAccess |
|
||||
| constants.rb:9:9:10:11 | ClassC | write | ClassC | Class |
|
||||
| constants.rb:9:24:9:24 | X | read | X | ConstantReadAccess |
|
||||
| constants.rb:9:24:9:27 | Y | read | Y | ConstantReadAccess |
|
||||
| constants.rb:9:24:9:30 | Z | read | Z | ConstantReadAccess |
|
||||
| constants.rb:14:1:14:8 | GREETING | write | GREETING | ConstantAssignment |
|
||||
| constants.rb:17:5:17:9 | Names | write | Names | ConstantAssignment |
|
||||
| constants.rb:19:5:19:9 | Names | read | Names | ConstantReadAccess |
|
||||
| constants.rb:20:18:20:25 | GREETING | read | GREETING | ConstantReadAccess |
|
||||
| constants.rb:28:1:29:3 | ClassD | write | ClassD | Class |
|
||||
| constants.rb:28:7:28:13 | ModuleA | read | ModuleA | ConstantReadAccess |
|
||||
| constants.rb:31:1:32:3 | ModuleC | write | ModuleC | Module |
|
||||
| constants.rb:31:8:31:14 | ModuleA | read | ModuleA | ConstantReadAccess |
|
||||
| constants.rb:34:1:34:7 | ModuleA | read | ModuleA | ConstantReadAccess |
|
||||
| constants.rb:34:1:34:16 | ModuleB | read | ModuleB | ConstantReadAccess |
|
||||
| constants.rb:34:1:34:26 | MAX_SIZE | write | MAX_SIZE | ConstantAssignment |
|
||||
8
ql/test/library-tests/ast/constants/constants.ql
Normal file
8
ql/test/library-tests/ast/constants/constants.ql
Normal file
@@ -0,0 +1,8 @@
|
||||
import ruby
|
||||
|
||||
from ConstantAccess a, string kind
|
||||
where
|
||||
a instanceof ConstantReadAccess and kind = "read"
|
||||
or
|
||||
a instanceof ConstantWriteAccess and kind = "write"
|
||||
select a, kind, a.getName(), a.getAPrimaryQlClass()
|
||||
34
ql/test/library-tests/ast/constants/constants.rb
Normal file
34
ql/test/library-tests/ast/constants/constants.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
module ModuleA
|
||||
class ClassA
|
||||
end
|
||||
|
||||
module ModuleB
|
||||
class ClassB < Base
|
||||
end
|
||||
|
||||
class ClassC < X::Y::Z
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
GREETING = 'Hello'
|
||||
|
||||
def foo
|
||||
Names = ['Vera', 'Chuck', 'Dave']
|
||||
|
||||
Names.each do |name|
|
||||
puts "#{ GREETING } #{ name }"
|
||||
end
|
||||
|
||||
# A call to Kernel::Array; despite beginning with an upper-case character,
|
||||
# we don't consider this to be a constant access.
|
||||
Array('foo')
|
||||
end
|
||||
|
||||
class ModuleA::ClassD
|
||||
end
|
||||
|
||||
module ModuleA::ModuleC
|
||||
end
|
||||
|
||||
ModuleA::ModuleB::MAX_SIZE = 1024
|
||||
@@ -11,6 +11,7 @@ classes
|
||||
| modules.rb:30:3:31:5 | ClassInAnotherDefinitionOfFoo | Class | ClassInAnotherDefinitionOfFoo |
|
||||
| modules.rb:49:3:50:5 | ClassInAnotherDefinitionOfFooBar | Class | ClassInAnotherDefinitionOfFooBar |
|
||||
classesWithNameScopeExprs
|
||||
| classes.rb:16:1:17:3 | MyClass | classes.rb:16:7:16:14 | MyModule |
|
||||
classesWithGlobalNameScopeExprs
|
||||
| classes.rb:55:1:56:3 | MyClassInGlobalScope |
|
||||
exprsInClasses
|
||||
@@ -28,4 +29,5 @@ classesInClasses
|
||||
modulesInClasses
|
||||
| classes.rb:20:1:37:3 | Wibble | classes.rb:35:3:36:5 | ModuleInWibble | ModuleInWibble |
|
||||
classesWithASuperclass
|
||||
| classes.rb:7:1:8:3 | Bar | classes.rb:7:13:7:21 | BaseClass |
|
||||
| classes.rb:11:1:12:3 | Baz | classes.rb:11:13:11:32 | call to superclass_for |
|
||||
|
||||
@@ -4,9 +4,9 @@ query predicate classes(Class c, string pClass, string name) {
|
||||
pClass = c.getAPrimaryQlClass() and name = c.getName()
|
||||
}
|
||||
|
||||
query predicate classesWithNameScopeExprs(Class c, Expr se) { se = c.getNameScopeExpr() }
|
||||
query predicate classesWithNameScopeExprs(Class c, Expr se) { se = c.getScopeExpr() }
|
||||
|
||||
query predicate classesWithGlobalNameScopeExprs(Class c) { c.nameHasGlobalScope() }
|
||||
query predicate classesWithGlobalNameScopeExprs(Class c) { c.hasGlobalScope() }
|
||||
|
||||
query predicate exprsInClasses(Class c, int i, Expr e, string eClass) {
|
||||
e = c.getExpr(i) and eClass = e.getAPrimaryQlClass()
|
||||
|
||||
@@ -9,6 +9,7 @@ modules
|
||||
| modules.rb:48:1:57:3 | Bar | Module | Bar |
|
||||
| modules.rb:60:1:61:3 | MyModuleInGlobalScope | Module | MyModuleInGlobalScope |
|
||||
modulesWithScopeExprs
|
||||
| modules.rb:48:1:57:3 | Bar | modules.rb:48:8:48:10 | Foo |
|
||||
modulesWithGlobalNameScopeExprs
|
||||
| modules.rb:60:1:61:3 | MyModuleInGlobalScope |
|
||||
exprsInModules
|
||||
|
||||
@@ -4,9 +4,9 @@ query predicate modules(Module m, string pClass, string name) {
|
||||
pClass = m.getAPrimaryQlClass() and name = m.getName()
|
||||
}
|
||||
|
||||
query predicate modulesWithScopeExprs(Module m, Expr se) { se = m.getNameScopeExpr() }
|
||||
query predicate modulesWithScopeExprs(Module m, Expr se) { se = m.getScopeExpr() }
|
||||
|
||||
query predicate modulesWithGlobalNameScopeExprs(Module m) { m.nameHasGlobalScope() }
|
||||
query predicate modulesWithGlobalNameScopeExprs(Module m) { m.hasGlobalScope() }
|
||||
|
||||
query predicate exprsInModules(Module m, int i, Expr e, string eClass) {
|
||||
e = m.getExpr(i) and eClass = e.getAPrimaryQlClass()
|
||||
|
||||
Reference in New Issue
Block a user