From 330b33638e706cedecd39b24fe1f689a84f8037e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 2 Jul 2021 10:38:53 +0200 Subject: [PATCH] Address review comments --- ql/src/codeql_ruby/ast/Method.qll | 4 +- ql/src/codeql_ruby/ast/Module.qll | 12 +- ql/src/codeql_ruby/ast/internal/Module.qll | 10 +- .../dataflow/internal/DataFlowDispatch.qll | 10 +- .../library-tests/modules/ancestors.expected | 35 +-- .../library-tests/modules/methods.expected | 240 ++++++++++++++++-- .../library-tests/modules/modules.expected | 35 ++- .../modules/superclasses.expected | 35 +-- 8 files changed, 269 insertions(+), 112 deletions(-) diff --git a/ql/src/codeql_ruby/ast/Method.qll b/ql/src/codeql_ruby/ast/Method.qll index de91b4fcf45..f0b66ba6b9d 100644 --- a/ql/src/codeql_ruby/ast/Method.qll +++ b/ql/src/codeql_ruby/ast/Method.qll @@ -105,9 +105,7 @@ class Method extends MethodBase, TMethod { j > i ) or - // Top-level methods are private members of the special "main object" (except - // when run through `irb`), see e.g. - // https://codequizzes.wordpress.com/2014/04/23/rubys-main-object-top-level-context/ + // Top-level methods are private members of the Object class this.getEnclosingModule() instanceof Toplevel } diff --git a/ql/src/codeql_ruby/ast/Module.qll b/ql/src/codeql_ruby/ast/Module.qll index e3629c5fa6f..c3f11063ab6 100644 --- a/ql/src/codeql_ruby/ast/Module.qll +++ b/ql/src/codeql_ruby/ast/Module.qll @@ -29,11 +29,6 @@ class Module extends TModule { this = TResolved(result) or exists(Namespace n | this = TUnresolved(n) and result = "...::" + n.toString()) - or - exists(Toplevel t | - this = TMain(t) and - result = "Main(" + t.toString() + ")" - ) } /** Gets the location of this module. */ @@ -52,11 +47,6 @@ class Module extends TModule { weight, count(n.getAStmt()) desc, loc.getFile().getAbsolutePath(), loc.getStartLine(), loc.getStartColumn() ) - or - exists(Toplevel t | - this = TMain(t) and - result = t.getLocation() - ) } } @@ -124,7 +114,7 @@ class Toplevel extends ModuleBase, TToplevel { pred = "getBeginBlock" and result = this.getBeginBlock(_) } - final override Module getModule() { result = TMain(this) } + final override Module getModule() { result = TResolved("Object") } final override string toString() { result = g.getLocation().getFile().getBaseName() } } diff --git a/ql/src/codeql_ruby/ast/internal/Module.qll b/ql/src/codeql_ruby/ast/internal/Module.qll index c5b9e56f252..2f632993a70 100644 --- a/ql/src/codeql_ruby/ast/internal/Module.qll +++ b/ql/src/codeql_ruby/ast/internal/Module.qll @@ -25,8 +25,7 @@ private module Cached { or qName = namespaceDeclaration(_) } or - TUnresolved(Namespace n) { not exists(namespaceDeclaration(n)) } or - TMain(Toplevel t) + TUnresolved(Namespace n) { not exists(namespaceDeclaration(n)) } cached string namespaceDeclaration(Namespace n) { @@ -62,14 +61,11 @@ private module Cached { result = resolveScopeExpr(d.getSuperclassExpr()) ) or + result = TResolved("Object") and forex(ClassDeclaration d | d = cls.getADeclaration() | not exists(resolveScopeExpr(d.getSuperclassExpr())) - ) and - result = TMain(cls.getADeclaration().getEnclosingModule()) + ) ) - or - cls = TMain(_) and - result = TResolved("Object") } cached diff --git a/ql/src/codeql_ruby/dataflow/internal/DataFlowDispatch.qll b/ql/src/codeql_ruby/dataflow/internal/DataFlowDispatch.qll index 7cf94752f2d..f96bf1e15c1 100644 --- a/ql/src/codeql_ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ql/src/codeql_ruby/dataflow/internal/DataFlowDispatch.qll @@ -91,7 +91,13 @@ class DataFlowCall extends CfgNodes::ExprNodes::CallCfgNode { self = this.getReceiver().getExpr() and pragma[only_bind_out](self.getEnclosingModule().getModule().getSuperClass*()) = pragma[only_bind_out](result.getEnclosingModule().getModule()) - ) + ) and + // For now, we restrict the scope of top-level declarations to their file. + // This may remove some plausible targets, but also removes a lot of + // implausible targets + if result.getEnclosingModule() instanceof Toplevel + then result.getFile() = this.getFile() + else any() else any() ) or @@ -166,7 +172,7 @@ private DataFlow::LocalSourceNode trackInstance(Module tp, TypeTracker t) { exists(Self self, Toplevel enclosing | self = result.asExpr().getExpr() and enclosing = self.getEnclosingModule() and - tp = TMain(enclosing) and + tp = TResolved("Object") and not self.getEnclosingMethod().getEnclosingModule() = enclosing ) or diff --git a/ql/test/library-tests/modules/ancestors.expected b/ql/test/library-tests/modules/ancestors.expected index 46ef47f475d..a9c235619fd 100644 --- a/ql/test/library-tests/modules/ancestors.expected +++ b/ql/test/library-tests/modules/ancestors.expected @@ -1,19 +1,3 @@ -calls.rb: -# 1| Main(calls.rb) -#-----| super -> Object - -hello.rb: -# 1| Main(hello.rb) -#-----| super -> Object - -modules.rb: -# 1| Main(modules.rb) -#-----| super -> Object - -private.rb: -# 1| Main(private.rb) -#-----| super -> Object - calls.rb: # 102| Hash #-----| super -> Object @@ -67,8 +51,7 @@ calls.rb: private.rb: # 1| C -#-----| super -> Main(calls.rb) -#-----| super -> Main(private.rb) +#-----| super -> Object #-----| include -> M calls.rb: @@ -76,10 +59,10 @@ calls.rb: #-----| super -> C # 82| String -#-----| super -> Main(calls.rb) +#-----| super -> Object # 144| S -#-----| super -> Main(calls.rb) +#-----| super -> Object # 150| A #-----| super -> S @@ -91,7 +74,7 @@ hello.rb: # 1| EnglishWords # 11| Greeting -#-----| super -> Main(hello.rb) +#-----| super -> Object #-----| include -> EnglishWords # 18| HelloWorld @@ -103,7 +86,7 @@ modules.rb: # 4| Foo # 37| Bar -#-----| super -> Main(modules.rb) +#-----| super -> Object # 60| MyModuleInGlobalScope @@ -123,15 +106,17 @@ modules.rb: # 107| MM # 112| YY -#-----| super -> Main(modules.rb) +#-----| super -> Object # 115| XX # 5| Foo::Bar # 19| Foo::ClassInFoo +#-----| super -> Object # 30| Foo::ClassInAnotherDefinitionOfFoo +#-----| super -> Object # 116| XX::YY #-----| super -> YY @@ -145,14 +130,17 @@ modules.rb: # 84| Other::Foo1 # 6| Foo::Bar::ClassInFooBar +#-----| super -> Object # 71| Test::Foo2::Foo2 # 108| MM::MM # 49| Foo::Bar::ClassInAnotherDefinitionOfFooBar +#-----| super -> Object # 66| Test::Foo1::Bar +#-----| super -> Object # 91| Test::Foo1::Y @@ -161,5 +149,6 @@ modules.rb: # 103| Test::Foo2::Y # 72| Test::Foo2::Foo2::Bar +#-----| super -> Object # 120| Test::Foo1::Bar::Baz diff --git a/ql/test/library-tests/modules/methods.expected b/ql/test/library-tests/modules/methods.expected index 09fda0b3ec4..4e229abf912 100644 --- a/ql/test/library-tests/modules/methods.expected +++ b/ql/test/library-tests/modules/methods.expected @@ -1,11 +1,4 @@ getMethod -| calls.rb:1:1:167:16 | Main(calls.rb) | call_block | calls.rb:67:1:69:3 | call_block | -| calls.rb:1:1:167:16 | Main(calls.rb) | foo | calls.rb:1:1:3:3 | foo | -| calls.rb:1:1:167:16 | Main(calls.rb) | foo | calls.rb:71:1:75:3 | foo | -| calls.rb:1:1:167:16 | Main(calls.rb) | funny | calls.rb:119:1:121:3 | funny | -| calls.rb:1:1:167:16 | Main(calls.rb) | indirect | calls.rb:137:1:139:3 | indirect | -| calls.rb:1:1:167:16 | Main(calls.rb) | optional_arg | calls.rb:62:1:65:3 | optional_arg | -| calls.rb:1:1:167:16 | Main(calls.rb) | private_on_main | calls.rb:164:1:165:3 | private_on_main | | calls.rb:15:1:24:3 | M | instance_m | calls.rb:16:5:16:23 | instance_m | | calls.rb:51:1:55:3 | D | baz | calls.rb:52:5:54:7 | baz | | calls.rb:77:1:80:3 | Integer | abs | calls.rb:79:5:79:16 | abs | @@ -16,7 +9,15 @@ getMethod | calls.rb:90:1:95:3 | Module | module_eval | calls.rb:91:5:91:24 | module_eval | | calls.rb:90:1:95:3 | Module | prepend | calls.rb:93:5:93:20 | prepend | | calls.rb:90:1:95:3 | Module | private | calls.rb:94:5:94:20 | private | +| calls.rb:97:1:100:3 | Object | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:97:1:100:3 | Object | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:97:1:100:3 | Object | foo | calls.rb:71:1:75:3 | foo | +| calls.rb:97:1:100:3 | Object | funny | calls.rb:119:1:121:3 | funny | +| calls.rb:97:1:100:3 | Object | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:97:1:100:3 | Object | new | calls.rb:99:5:99:16 | new | +| calls.rb:97:1:100:3 | Object | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| calls.rb:97:1:100:3 | Object | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:97:1:100:3 | Object | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:102:1:104:3 | Hash | [] | calls.rb:103:5:103:15 | [] | | calls.rb:106:1:117:3 | Array | [] | calls.rb:107:3:107:13 | [] | | calls.rb:106:1:117:3 | Array | foreach | calls.rb:110:3:116:5 | foreach | @@ -39,17 +40,7 @@ getMethod | private.rb:1:1:19:3 | C | private3 | private.rb:14:3:15:5 | private3 | | private.rb:1:1:19:3 | C | private4 | private.rb:17:3:18:5 | private4 | | private.rb:1:1:19:3 | C | public | private.rb:5:3:6:5 | public | -| private.rb:1:1:30:15 | Main(private.rb) | private_on_main | private.rb:21:1:22:3 | private_on_main | lookupMethod -| calls.rb:1:1:167:16 | Main(calls.rb) | call_block | calls.rb:67:1:69:3 | call_block | -| calls.rb:1:1:167:16 | Main(calls.rb) | foo | calls.rb:1:1:3:3 | foo | -| calls.rb:1:1:167:16 | Main(calls.rb) | foo | calls.rb:71:1:75:3 | foo | -| calls.rb:1:1:167:16 | Main(calls.rb) | funny | calls.rb:119:1:121:3 | funny | -| calls.rb:1:1:167:16 | Main(calls.rb) | indirect | calls.rb:137:1:139:3 | indirect | -| calls.rb:1:1:167:16 | Main(calls.rb) | new | calls.rb:99:5:99:16 | new | -| calls.rb:1:1:167:16 | Main(calls.rb) | optional_arg | calls.rb:62:1:65:3 | optional_arg | -| calls.rb:1:1:167:16 | Main(calls.rb) | private_on_main | calls.rb:164:1:165:3 | private_on_main | -| calls.rb:1:1:167:16 | Main(calls.rb) | puts | calls.rb:87:5:87:17 | puts | | calls.rb:15:1:24:3 | M | instance_m | calls.rb:16:5:16:23 | instance_m | | calls.rb:51:1:55:3 | D | baz | calls.rb:52:5:54:7 | baz | | calls.rb:51:1:55:3 | D | call_block | calls.rb:67:1:69:3 | call_block | @@ -69,7 +60,15 @@ lookupMethod | calls.rb:51:1:55:3 | D | puts | calls.rb:87:5:87:17 | puts | | calls.rb:77:1:80:3 | Integer | abs | calls.rb:79:5:79:16 | abs | | calls.rb:77:1:80:3 | Integer | bit_length | calls.rb:78:5:78:23 | bit_length | +| calls.rb:77:1:80:3 | Integer | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:77:1:80:3 | Integer | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:77:1:80:3 | Integer | foo | calls.rb:71:1:75:3 | foo | +| calls.rb:77:1:80:3 | Integer | funny | calls.rb:119:1:121:3 | funny | +| calls.rb:77:1:80:3 | Integer | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:77:1:80:3 | Integer | new | calls.rb:99:5:99:16 | new | +| calls.rb:77:1:80:3 | Integer | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| calls.rb:77:1:80:3 | Integer | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:77:1:80:3 | Integer | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:77:1:80:3 | Integer | puts | calls.rb:87:5:87:17 | puts | | calls.rb:82:1:84:3 | String | call_block | calls.rb:67:1:69:3 | call_block | | calls.rb:82:1:84:3 | String | capitalize | calls.rb:83:5:83:23 | capitalize | @@ -80,23 +79,56 @@ lookupMethod | calls.rb:82:1:84:3 | String | new | calls.rb:99:5:99:16 | new | | calls.rb:82:1:84:3 | String | optional_arg | calls.rb:62:1:65:3 | optional_arg | | calls.rb:82:1:84:3 | String | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:82:1:84:3 | String | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:82:1:84:3 | String | puts | calls.rb:87:5:87:17 | puts | | calls.rb:86:1:88:3 | Kernel | puts | calls.rb:87:5:87:17 | puts | +| calls.rb:90:1:95:3 | Module | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:90:1:95:3 | Module | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:90:1:95:3 | Module | foo | calls.rb:71:1:75:3 | foo | +| calls.rb:90:1:95:3 | Module | funny | calls.rb:119:1:121:3 | funny | | calls.rb:90:1:95:3 | Module | include | calls.rb:92:5:92:20 | include | +| calls.rb:90:1:95:3 | Module | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:90:1:95:3 | Module | module_eval | calls.rb:91:5:91:24 | module_eval | | calls.rb:90:1:95:3 | Module | new | calls.rb:99:5:99:16 | new | +| calls.rb:90:1:95:3 | Module | optional_arg | calls.rb:62:1:65:3 | optional_arg | | calls.rb:90:1:95:3 | Module | prepend | calls.rb:93:5:93:20 | prepend | | calls.rb:90:1:95:3 | Module | private | calls.rb:94:5:94:20 | private | +| calls.rb:90:1:95:3 | Module | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:90:1:95:3 | Module | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:90:1:95:3 | Module | puts | calls.rb:87:5:87:17 | puts | +| calls.rb:97:1:100:3 | Object | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:97:1:100:3 | Object | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:97:1:100:3 | Object | foo | calls.rb:71:1:75:3 | foo | +| calls.rb:97:1:100:3 | Object | funny | calls.rb:119:1:121:3 | funny | +| calls.rb:97:1:100:3 | Object | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:97:1:100:3 | Object | new | calls.rb:99:5:99:16 | new | +| calls.rb:97:1:100:3 | Object | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| calls.rb:97:1:100:3 | Object | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:97:1:100:3 | Object | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:97:1:100:3 | Object | puts | calls.rb:87:5:87:17 | puts | | calls.rb:102:1:104:3 | Hash | [] | calls.rb:103:5:103:15 | [] | +| calls.rb:102:1:104:3 | Hash | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:102:1:104:3 | Hash | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:102:1:104:3 | Hash | foo | calls.rb:71:1:75:3 | foo | +| calls.rb:102:1:104:3 | Hash | funny | calls.rb:119:1:121:3 | funny | +| calls.rb:102:1:104:3 | Hash | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:102:1:104:3 | Hash | new | calls.rb:99:5:99:16 | new | +| calls.rb:102:1:104:3 | Hash | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| calls.rb:102:1:104:3 | Hash | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:102:1:104:3 | Hash | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:102:1:104:3 | Hash | puts | calls.rb:87:5:87:17 | puts | | calls.rb:106:1:117:3 | Array | [] | calls.rb:107:3:107:13 | [] | +| calls.rb:106:1:117:3 | Array | call_block | calls.rb:67:1:69:3 | call_block | +| calls.rb:106:1:117:3 | Array | foo | calls.rb:1:1:3:3 | foo | +| calls.rb:106:1:117:3 | Array | foo | calls.rb:71:1:75:3 | foo | | calls.rb:106:1:117:3 | Array | foreach | calls.rb:110:3:116:5 | foreach | +| calls.rb:106:1:117:3 | Array | funny | calls.rb:119:1:121:3 | funny | +| calls.rb:106:1:117:3 | Array | indirect | calls.rb:137:1:139:3 | indirect | | calls.rb:106:1:117:3 | Array | length | calls.rb:108:3:108:17 | length | | calls.rb:106:1:117:3 | Array | new | calls.rb:99:5:99:16 | new | +| calls.rb:106:1:117:3 | Array | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| calls.rb:106:1:117:3 | Array | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:106:1:117:3 | Array | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:106:1:117:3 | Array | puts | calls.rb:87:5:87:17 | puts | | calls.rb:144:1:148:3 | S | call_block | calls.rb:67:1:69:3 | call_block | | calls.rb:144:1:148:3 | S | foo | calls.rb:1:1:3:3 | foo | @@ -106,6 +138,7 @@ lookupMethod | calls.rb:144:1:148:3 | S | new | calls.rb:99:5:99:16 | new | | calls.rb:144:1:148:3 | S | optional_arg | calls.rb:62:1:65:3 | optional_arg | | calls.rb:144:1:148:3 | S | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:144:1:148:3 | S | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:144:1:148:3 | S | puts | calls.rb:87:5:87:17 | puts | | calls.rb:144:1:148:3 | S | s_method | calls.rb:145:5:147:7 | s_method | | calls.rb:150:1:153:3 | A | call_block | calls.rb:67:1:69:3 | call_block | @@ -116,6 +149,7 @@ lookupMethod | calls.rb:150:1:153:3 | A | new | calls.rb:99:5:99:16 | new | | calls.rb:150:1:153:3 | A | optional_arg | calls.rb:62:1:65:3 | optional_arg | | calls.rb:150:1:153:3 | A | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:150:1:153:3 | A | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:150:1:153:3 | A | puts | calls.rb:87:5:87:17 | puts | | calls.rb:150:1:153:3 | A | s_method | calls.rb:145:5:147:7 | s_method | | calls.rb:150:1:153:3 | A | to_s | calls.rb:151:5:152:7 | to_s | @@ -127,56 +161,217 @@ lookupMethod | calls.rb:155:1:158:3 | B | new | calls.rb:99:5:99:16 | new | | calls.rb:155:1:158:3 | B | optional_arg | calls.rb:62:1:65:3 | optional_arg | | calls.rb:155:1:158:3 | B | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| calls.rb:155:1:158:3 | B | private_on_main | private.rb:21:1:22:3 | private_on_main | | calls.rb:155:1:158:3 | B | puts | calls.rb:87:5:87:17 | puts | | calls.rb:155:1:158:3 | B | s_method | calls.rb:145:5:147:7 | s_method | | calls.rb:155:1:158:3 | B | to_s | calls.rb:156:5:157:7 | to_s | +| file://:0:0:0:0 | Class | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | Class | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | Class | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | Class | funny | calls.rb:119:1:121:3 | funny | | file://:0:0:0:0 | Class | include | calls.rb:92:5:92:20 | include | +| file://:0:0:0:0 | Class | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | Class | module_eval | calls.rb:91:5:91:24 | module_eval | | file://:0:0:0:0 | Class | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | Class | optional_arg | calls.rb:62:1:65:3 | optional_arg | | file://:0:0:0:0 | Class | prepend | calls.rb:93:5:93:20 | prepend | | file://:0:0:0:0 | Class | private | calls.rb:94:5:94:20 | private | +| file://:0:0:0:0 | Class | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | Class | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | Class | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | Complex | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | Complex | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | Complex | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | Complex | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | Complex | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | Complex | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | Complex | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | Complex | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | Complex | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | Complex | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | FalseClass | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | FalseClass | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | FalseClass | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | FalseClass | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | FalseClass | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | FalseClass | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | FalseClass | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | FalseClass | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | FalseClass | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | FalseClass | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | Float | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | Float | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | Float | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | Float | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | Float | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | Float | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | Float | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | Float | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | Float | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | Float | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | NilClass | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | NilClass | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | NilClass | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | NilClass | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | NilClass | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | NilClass | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | NilClass | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | NilClass | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | NilClass | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | NilClass | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | Numeric | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | Numeric | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | Numeric | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | Numeric | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | Numeric | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | Numeric | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | Numeric | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | Numeric | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | Numeric | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | Numeric | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | Rational | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | Rational | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | Rational | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | Rational | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | Rational | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | Rational | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | Rational | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | Rational | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | Rational | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | Rational | puts | calls.rb:87:5:87:17 | puts | +| file://:0:0:0:0 | TrueClass | call_block | calls.rb:67:1:69:3 | call_block | +| file://:0:0:0:0 | TrueClass | foo | calls.rb:1:1:3:3 | foo | +| file://:0:0:0:0 | TrueClass | foo | calls.rb:71:1:75:3 | foo | +| file://:0:0:0:0 | TrueClass | funny | calls.rb:119:1:121:3 | funny | +| file://:0:0:0:0 | TrueClass | indirect | calls.rb:137:1:139:3 | indirect | | file://:0:0:0:0 | TrueClass | new | calls.rb:99:5:99:16 | new | +| file://:0:0:0:0 | TrueClass | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| file://:0:0:0:0 | TrueClass | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| file://:0:0:0:0 | TrueClass | private_on_main | private.rb:21:1:22:3 | private_on_main | | file://:0:0:0:0 | TrueClass | puts | calls.rb:87:5:87:17 | puts | | hello.rb:1:1:8:3 | EnglishWords | hello | hello.rb:2:5:4:7 | hello | | hello.rb:1:1:8:3 | EnglishWords | world | hello.rb:5:5:7:7 | world | -| hello.rb:1:1:22:3 | Main(hello.rb) | new | calls.rb:99:5:99:16 | new | -| hello.rb:1:1:22:3 | Main(hello.rb) | puts | calls.rb:87:5:87:17 | puts | +| hello.rb:11:1:16:3 | Greeting | call_block | calls.rb:67:1:69:3 | call_block | +| hello.rb:11:1:16:3 | Greeting | foo | calls.rb:1:1:3:3 | foo | +| hello.rb:11:1:16:3 | Greeting | foo | calls.rb:71:1:75:3 | foo | +| hello.rb:11:1:16:3 | Greeting | funny | calls.rb:119:1:121:3 | funny | | hello.rb:11:1:16:3 | Greeting | hello | hello.rb:2:5:4:7 | hello | +| hello.rb:11:1:16:3 | Greeting | indirect | calls.rb:137:1:139:3 | indirect | | hello.rb:11:1:16:3 | Greeting | message | hello.rb:13:5:15:7 | message | | hello.rb:11:1:16:3 | Greeting | new | calls.rb:99:5:99:16 | new | +| hello.rb:11:1:16:3 | Greeting | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| hello.rb:11:1:16:3 | Greeting | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| hello.rb:11:1:16:3 | Greeting | private_on_main | private.rb:21:1:22:3 | private_on_main | | hello.rb:11:1:16:3 | Greeting | puts | calls.rb:87:5:87:17 | puts | | hello.rb:11:1:16:3 | Greeting | world | hello.rb:5:5:7:7 | world | +| hello.rb:18:1:22:3 | HelloWorld | call_block | calls.rb:67:1:69:3 | call_block | +| hello.rb:18:1:22:3 | HelloWorld | foo | calls.rb:1:1:3:3 | foo | +| hello.rb:18:1:22:3 | HelloWorld | foo | calls.rb:71:1:75:3 | foo | +| hello.rb:18:1:22:3 | HelloWorld | funny | calls.rb:119:1:121:3 | funny | | hello.rb:18:1:22:3 | HelloWorld | hello | hello.rb:2:5:4:7 | hello | +| hello.rb:18:1:22:3 | HelloWorld | indirect | calls.rb:137:1:139:3 | indirect | | hello.rb:18:1:22:3 | HelloWorld | message | hello.rb:19:5:21:7 | message | | hello.rb:18:1:22:3 | HelloWorld | new | calls.rb:99:5:99:16 | new | +| hello.rb:18:1:22:3 | HelloWorld | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| hello.rb:18:1:22:3 | HelloWorld | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| hello.rb:18:1:22:3 | HelloWorld | private_on_main | private.rb:21:1:22:3 | private_on_main | | hello.rb:18:1:22:3 | HelloWorld | puts | calls.rb:87:5:87:17 | puts | | hello.rb:18:1:22:3 | HelloWorld | world | hello.rb:5:5:7:7 | world | -| modules.rb:1:1:122:1 | Main(modules.rb) | new | calls.rb:99:5:99:16 | new | -| modules.rb:1:1:122:1 | Main(modules.rb) | puts | calls.rb:87:5:87:17 | puts | | modules.rb:4:1:24:3 | Foo | method_in_another_definition_of_foo | modules.rb:27:3:28:5 | method_in_another_definition_of_foo | | modules.rb:4:1:24:3 | Foo | method_in_foo | modules.rb:16:3:17:5 | method_in_foo | | modules.rb:5:3:14:5 | Foo::Bar | method_in_another_definition_of_foo_bar | modules.rb:52:3:53:5 | method_in_another_definition_of_foo_bar | | modules.rb:5:3:14:5 | Foo::Bar | method_in_foo_bar | modules.rb:9:5:10:7 | method_in_foo_bar | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | new | calls.rb:99:5:99:16 | new | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | new | calls.rb:99:5:99:16 | new | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | new | calls.rb:99:5:99:16 | new | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:37:1:46:3 | Bar | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:37:1:46:3 | Bar | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:37:1:46:3 | Bar | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:37:1:46:3 | Bar | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:37:1:46:3 | Bar | indirect | calls.rb:137:1:139:3 | indirect | | modules.rb:37:1:46:3 | Bar | method_a | modules.rb:38:3:39:5 | method_a | | modules.rb:37:1:46:3 | Bar | method_b | modules.rb:41:3:42:5 | method_b | | modules.rb:37:1:46:3 | Bar | new | calls.rb:99:5:99:16 | new | +| modules.rb:37:1:46:3 | Bar | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:37:1:46:3 | Bar | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:37:1:46:3 | Bar | private_on_main | private.rb:21:1:22:3 | private_on_main | | modules.rb:37:1:46:3 | Bar | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | new | calls.rb:99:5:99:16 | new | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | new | calls.rb:99:5:99:16 | new | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | indirect | calls.rb:137:1:139:3 | indirect | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | new | calls.rb:99:5:99:16 | new | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | private_on_main | private.rb:21:1:22:3 | private_on_main | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:112:1:113:3 | YY | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:112:1:113:3 | YY | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:112:1:113:3 | YY | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:112:1:113:3 | YY | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:112:1:113:3 | YY | indirect | calls.rb:137:1:139:3 | indirect | | modules.rb:112:1:113:3 | YY | new | calls.rb:99:5:99:16 | new | +| modules.rb:112:1:113:3 | YY | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:112:1:113:3 | YY | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:112:1:113:3 | YY | private_on_main | private.rb:21:1:22:3 | private_on_main | | modules.rb:112:1:113:3 | YY | puts | calls.rb:87:5:87:17 | puts | +| modules.rb:116:7:117:9 | XX::YY | call_block | calls.rb:67:1:69:3 | call_block | +| modules.rb:116:7:117:9 | XX::YY | foo | calls.rb:1:1:3:3 | foo | +| modules.rb:116:7:117:9 | XX::YY | foo | calls.rb:71:1:75:3 | foo | +| modules.rb:116:7:117:9 | XX::YY | funny | calls.rb:119:1:121:3 | funny | +| modules.rb:116:7:117:9 | XX::YY | indirect | calls.rb:137:1:139:3 | indirect | | modules.rb:116:7:117:9 | XX::YY | new | calls.rb:99:5:99:16 | new | +| modules.rb:116:7:117:9 | XX::YY | optional_arg | calls.rb:62:1:65:3 | optional_arg | +| modules.rb:116:7:117:9 | XX::YY | private_on_main | calls.rb:164:1:165:3 | private_on_main | +| modules.rb:116:7:117:9 | XX::YY | private_on_main | private.rb:21:1:22:3 | private_on_main | | modules.rb:116:7:117:9 | XX::YY | puts | calls.rb:87:5:87:17 | puts | | private.rb:1:1:19:3 | C | baz | calls.rb:37:5:43:7 | baz | | private.rb:1:1:19:3 | C | call_block | calls.rb:67:1:69:3 | call_block | @@ -194,6 +389,3 @@ lookupMethod | private.rb:1:1:19:3 | C | private_on_main | private.rb:21:1:22:3 | private_on_main | | private.rb:1:1:19:3 | C | public | private.rb:5:3:6:5 | public | | private.rb:1:1:19:3 | C | puts | calls.rb:87:5:87:17 | puts | -| private.rb:1:1:30:15 | Main(private.rb) | new | calls.rb:99:5:99:16 | new | -| private.rb:1:1:30:15 | Main(private.rb) | private_on_main | private.rb:21:1:22:3 | private_on_main | -| private.rb:1:1:30:15 | Main(private.rb) | puts | calls.rb:87:5:87:17 | puts | diff --git a/ql/test/library-tests/modules/modules.expected b/ql/test/library-tests/modules/modules.expected index eb65baacc32..b7402d83003 100644 --- a/ql/test/library-tests/modules/modules.expected +++ b/ql/test/library-tests/modules/modules.expected @@ -1,5 +1,4 @@ getModule -| calls.rb:1:1:167:16 | Main(calls.rb) | | calls.rb:15:1:24:3 | M | | calls.rb:51:1:55:3 | D | | calls.rb:77:1:80:3 | Integer | @@ -24,11 +23,9 @@ getModule | file://:0:0:0:0 | Symbol | | file://:0:0:0:0 | TrueClass | | hello.rb:1:1:8:3 | EnglishWords | -| hello.rb:1:1:22:3 | Main(hello.rb) | | hello.rb:11:1:16:3 | Greeting | | hello.rb:18:1:22:3 | HelloWorld | | modules.rb:1:1:2:3 | Empty | -| modules.rb:1:1:122:1 | Main(modules.rb) | | modules.rb:4:1:24:3 | Foo | | modules.rb:5:3:14:5 | Foo::Bar | | modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | @@ -59,27 +56,27 @@ getModule | modules.rb:116:7:117:9 | XX::YY | | modules.rb:120:1:121:3 | Test::Foo1::Bar::Baz | | private.rb:1:1:19:3 | C | -| private.rb:1:1:30:15 | Main(private.rb) | getADeclaration -| calls.rb:1:1:167:16 | Main(calls.rb) | calls.rb:1:1:167:16 | calls.rb | | calls.rb:15:1:24:3 | M | calls.rb:15:1:24:3 | M | | calls.rb:51:1:55:3 | D | calls.rb:51:1:55:3 | D | | calls.rb:77:1:80:3 | Integer | calls.rb:77:1:80:3 | Integer | | calls.rb:82:1:84:3 | String | calls.rb:82:1:84:3 | String | | calls.rb:86:1:88:3 | Kernel | calls.rb:86:1:88:3 | Kernel | | calls.rb:90:1:95:3 | Module | calls.rb:90:1:95:3 | Module | +| calls.rb:97:1:100:3 | Object | calls.rb:1:1:167:16 | calls.rb | | calls.rb:97:1:100:3 | Object | calls.rb:97:1:100:3 | Object | +| calls.rb:97:1:100:3 | Object | hello.rb:1:1:22:3 | hello.rb | +| calls.rb:97:1:100:3 | Object | modules.rb:1:1:122:1 | modules.rb | +| calls.rb:97:1:100:3 | Object | private.rb:1:1:30:15 | private.rb | | calls.rb:102:1:104:3 | Hash | calls.rb:102:1:104:3 | Hash | | calls.rb:106:1:117:3 | Array | calls.rb:106:1:117:3 | Array | | calls.rb:144:1:148:3 | S | calls.rb:144:1:148:3 | S | | calls.rb:150:1:153:3 | A | calls.rb:150:1:153:3 | A | | calls.rb:155:1:158:3 | B | calls.rb:155:1:158:3 | B | | hello.rb:1:1:8:3 | EnglishWords | hello.rb:1:1:8:3 | EnglishWords | -| hello.rb:1:1:22:3 | Main(hello.rb) | hello.rb:1:1:22:3 | hello.rb | | hello.rb:11:1:16:3 | Greeting | hello.rb:11:1:16:3 | Greeting | | hello.rb:18:1:22:3 | HelloWorld | hello.rb:18:1:22:3 | HelloWorld | | modules.rb:1:1:2:3 | Empty | modules.rb:1:1:2:3 | Empty | -| modules.rb:1:1:122:1 | Main(modules.rb) | modules.rb:1:1:122:1 | modules.rb | | modules.rb:4:1:24:3 | Foo | modules.rb:4:1:24:3 | Foo | | modules.rb:4:1:24:3 | Foo | modules.rb:26:1:35:3 | Foo | | modules.rb:5:3:14:5 | Foo::Bar | modules.rb:5:3:14:5 | Bar | @@ -114,17 +111,15 @@ getADeclaration | modules.rb:120:1:121:3 | Test::Foo1::Bar::Baz | modules.rb:120:1:121:3 | Baz | | private.rb:1:1:19:3 | C | calls.rb:29:1:44:3 | C | | private.rb:1:1:19:3 | C | private.rb:1:1:19:3 | C | -| private.rb:1:1:30:15 | Main(private.rb) | private.rb:1:1:30:15 | private.rb | getSuperClass -| calls.rb:1:1:167:16 | Main(calls.rb) | calls.rb:97:1:100:3 | Object | | calls.rb:51:1:55:3 | D | private.rb:1:1:19:3 | C | | calls.rb:77:1:80:3 | Integer | file://:0:0:0:0 | Numeric | -| calls.rb:82:1:84:3 | String | calls.rb:1:1:167:16 | Main(calls.rb) | +| calls.rb:82:1:84:3 | String | calls.rb:97:1:100:3 | Object | | calls.rb:90:1:95:3 | Module | calls.rb:97:1:100:3 | Object | | calls.rb:97:1:100:3 | Object | file://:0:0:0:0 | BasicObject | | calls.rb:102:1:104:3 | Hash | calls.rb:97:1:100:3 | Object | | calls.rb:106:1:117:3 | Array | calls.rb:97:1:100:3 | Object | -| calls.rb:144:1:148:3 | S | calls.rb:1:1:167:16 | Main(calls.rb) | +| calls.rb:144:1:148:3 | S | calls.rb:97:1:100:3 | Object | | calls.rb:150:1:153:3 | A | calls.rb:144:1:148:3 | S | | calls.rb:155:1:158:3 | B | calls.rb:144:1:148:3 | S | | file://:0:0:0:0 | Class | calls.rb:90:1:95:3 | Module | @@ -135,16 +130,18 @@ getSuperClass | file://:0:0:0:0 | Numeric | calls.rb:97:1:100:3 | Object | | file://:0:0:0:0 | Rational | file://:0:0:0:0 | Numeric | | file://:0:0:0:0 | TrueClass | calls.rb:97:1:100:3 | Object | -| hello.rb:1:1:22:3 | Main(hello.rb) | calls.rb:97:1:100:3 | Object | -| hello.rb:11:1:16:3 | Greeting | hello.rb:1:1:22:3 | Main(hello.rb) | +| hello.rb:11:1:16:3 | Greeting | calls.rb:97:1:100:3 | Object | | hello.rb:18:1:22:3 | HelloWorld | hello.rb:11:1:16:3 | Greeting | -| modules.rb:1:1:122:1 | Main(modules.rb) | calls.rb:97:1:100:3 | Object | -| modules.rb:37:1:46:3 | Bar | modules.rb:1:1:122:1 | Main(modules.rb) | -| modules.rb:112:1:113:3 | YY | modules.rb:1:1:122:1 | Main(modules.rb) | +| modules.rb:6:5:7:7 | Foo::Bar::ClassInFooBar | calls.rb:97:1:100:3 | Object | +| modules.rb:19:3:20:5 | Foo::ClassInFoo | calls.rb:97:1:100:3 | Object | +| modules.rb:30:3:31:5 | Foo::ClassInAnotherDefinitionOfFoo | calls.rb:97:1:100:3 | Object | +| modules.rb:37:1:46:3 | Bar | calls.rb:97:1:100:3 | Object | +| modules.rb:49:3:50:5 | Foo::Bar::ClassInAnotherDefinitionOfFooBar | calls.rb:97:1:100:3 | Object | +| modules.rb:66:5:67:7 | Test::Foo1::Bar | calls.rb:97:1:100:3 | Object | +| modules.rb:72:5:73:7 | Test::Foo2::Foo2::Bar | calls.rb:97:1:100:3 | Object | +| modules.rb:112:1:113:3 | YY | calls.rb:97:1:100:3 | Object | | modules.rb:116:7:117:9 | XX::YY | modules.rb:112:1:113:3 | YY | -| private.rb:1:1:19:3 | C | calls.rb:1:1:167:16 | Main(calls.rb) | -| private.rb:1:1:19:3 | C | private.rb:1:1:30:15 | Main(private.rb) | -| private.rb:1:1:30:15 | Main(private.rb) | calls.rb:97:1:100:3 | Object | +| private.rb:1:1:19:3 | C | calls.rb:97:1:100:3 | Object | getAPrependedModule | modules.rb:101:1:105:3 | PrependTest | modules.rb:63:1:81:3 | Test | getAnIncludedModule diff --git a/ql/test/library-tests/modules/superclasses.expected b/ql/test/library-tests/modules/superclasses.expected index c305b3cc929..b1948a9976e 100644 --- a/ql/test/library-tests/modules/superclasses.expected +++ b/ql/test/library-tests/modules/superclasses.expected @@ -1,19 +1,3 @@ -calls.rb: -# 1| Main(calls.rb) -#-----| -> Object - -hello.rb: -# 1| Main(hello.rb) -#-----| -> Object - -modules.rb: -# 1| Main(modules.rb) -#-----| -> Object - -private.rb: -# 1| Main(private.rb) -#-----| -> Object - calls.rb: # 102| Hash #-----| -> Object @@ -66,18 +50,17 @@ calls.rb: private.rb: # 1| C -#-----| -> Main(calls.rb) -#-----| -> Main(private.rb) +#-----| -> Object calls.rb: # 51| D #-----| -> C # 82| String -#-----| -> Main(calls.rb) +#-----| -> Object # 144| S -#-----| -> Main(calls.rb) +#-----| -> Object # 150| A #-----| -> S @@ -89,7 +72,7 @@ hello.rb: # 1| EnglishWords # 11| Greeting -#-----| -> Main(hello.rb) +#-----| -> Object # 18| HelloWorld #-----| -> Greeting @@ -100,7 +83,7 @@ modules.rb: # 4| Foo # 37| Bar -#-----| -> Main(modules.rb) +#-----| -> Object # 60| MyModuleInGlobalScope @@ -117,15 +100,17 @@ modules.rb: # 107| MM # 112| YY -#-----| -> Main(modules.rb) +#-----| -> Object # 115| XX # 5| Foo::Bar # 19| Foo::ClassInFoo +#-----| -> Object # 30| Foo::ClassInAnotherDefinitionOfFoo +#-----| -> Object # 116| XX::YY #-----| -> YY @@ -139,14 +124,17 @@ modules.rb: # 84| Other::Foo1 # 6| Foo::Bar::ClassInFooBar +#-----| -> Object # 71| Test::Foo2::Foo2 # 108| MM::MM # 49| Foo::Bar::ClassInAnotherDefinitionOfFooBar +#-----| -> Object # 66| Test::Foo1::Bar +#-----| -> Object # 91| Test::Foo1::Y @@ -155,5 +143,6 @@ modules.rb: # 103| Test::Foo2::Y # 72| Test::Foo2::Foo2::Bar +#-----| -> Object # 120| Test::Foo1::Bar::Baz