mirror of
https://github.com/github/codeql.git
synced 2026-05-01 03:35:13 +02:00
Ruby: add some basic tests
This commit is contained in:
225
ruby/ql/test/library-tests/dataflow/helpers/dataflow.expected
Normal file
225
ruby/ql/test/library-tests/dataflow/helpers/dataflow.expected
Normal file
@@ -0,0 +1,225 @@
|
||||
getAnAncestorExpr
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:8:12:8:13 | C1 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:27:12:27:13 | C2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:28:13:28:17 | Mixin |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:29:13:29:18 | Mixin2 |
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | tst.rb:41:17:41:20 | Y |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | tst.rb:44:21:44:24 | Y |
|
||||
| tst.rb:49:1:51:3 | N2 | tst.rb:50:13:50:13 | X |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | tst.rb:53:17:53:17 | Y |
|
||||
getAnAncestor
|
||||
| file://:0:0:0:0 | Array | file://:0:0:0:0 | Array |
|
||||
| file://:0:0:0:0 | Array | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Array | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | BasicObject | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Class | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Class | file://:0:0:0:0 | Class |
|
||||
| file://:0:0:0:0 | Class | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Class | file://:0:0:0:0 | Module |
|
||||
| file://:0:0:0:0 | Class | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Complex | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Complex | file://:0:0:0:0 | Complex |
|
||||
| file://:0:0:0:0 | Complex | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Complex | file://:0:0:0:0 | Numeric |
|
||||
| file://:0:0:0:0 | Complex | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | FalseClass | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | FalseClass | file://:0:0:0:0 | FalseClass |
|
||||
| file://:0:0:0:0 | FalseClass | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | FalseClass | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Float | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Float | file://:0:0:0:0 | Float |
|
||||
| file://:0:0:0:0 | Float | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Float | file://:0:0:0:0 | Numeric |
|
||||
| file://:0:0:0:0 | Float | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Hash | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Hash | file://:0:0:0:0 | Hash |
|
||||
| file://:0:0:0:0 | Hash | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Hash | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Integer | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Integer |
|
||||
| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Numeric |
|
||||
| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Kernel | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Module | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Module | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Module | file://:0:0:0:0 | Module |
|
||||
| file://:0:0:0:0 | Module | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | NilClass | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | NilClass | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | NilClass | file://:0:0:0:0 | NilClass |
|
||||
| file://:0:0:0:0 | NilClass | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Numeric | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Numeric | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Numeric | file://:0:0:0:0 | Numeric |
|
||||
| file://:0:0:0:0 | Numeric | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Object | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Object | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Object | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Proc | file://:0:0:0:0 | Proc |
|
||||
| file://:0:0:0:0 | Rational | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | Rational | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | Rational | file://:0:0:0:0 | Numeric |
|
||||
| file://:0:0:0:0 | Rational | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | Rational | file://:0:0:0:0 | Rational |
|
||||
| file://:0:0:0:0 | String | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | String | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | String | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | String | file://:0:0:0:0 | String |
|
||||
| file://:0:0:0:0 | Symbol | file://:0:0:0:0 | Symbol |
|
||||
| file://:0:0:0:0 | TrueClass | file://:0:0:0:0 | BasicObject |
|
||||
| file://:0:0:0:0 | TrueClass | file://:0:0:0:0 | Kernel |
|
||||
| file://:0:0:0:0 | TrueClass | file://:0:0:0:0 | Object |
|
||||
| file://:0:0:0:0 | TrueClass | file://:0:0:0:0 | TrueClass |
|
||||
| tst.rb:1:1:6:3 | C1 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:1:1:6:3 | C1 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:1:1:6:3 | C1 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:1:1:6:3 | C1 | tst.rb:1:1:6:3 | C1 |
|
||||
| tst.rb:8:1:11:3 | C2 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:8:1:11:3 | C2 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:8:1:11:3 | C2 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:1:1:6:3 | C1 |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:8:1:11:3 | C2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | tst.rb:13:1:18:3 | Mixin |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | tst.rb:20:1:25:3 | Mixin2 |
|
||||
| tst.rb:27:1:35:3 | C3 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:27:1:35:3 | C3 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:27:1:35:3 | C3 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:1:1:6:3 | C1 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:8:1:11:3 | C2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:13:1:18:3 | Mixin |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:20:1:25:3 | Mixin2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:27:1:35:3 | C3 |
|
||||
| tst.rb:40:1:47:3 | N1 | tst.rb:40:1:47:3 | N1 |
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | tst.rb:41:5:42:7 | N1::XY1 |
|
||||
| tst.rb:43:5:46:7 | N1::N2 | tst.rb:43:5:46:7 | N1::N2 |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | tst.rb:44:9:45:11 | N1::N2::XY2 |
|
||||
| tst.rb:49:1:51:3 | N2 | tst.rb:49:1:51:3 | N2 |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | file://:0:0:0:0 | Object |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | tst.rb:53:5:54:7 | N2::XY3 |
|
||||
| tst.rb:57:1:62:3 | Nodes | file://:0:0:0:0 | BasicObject |
|
||||
| tst.rb:57:1:62:3 | Nodes | file://:0:0:0:0 | Kernel |
|
||||
| tst.rb:57:1:62:3 | Nodes | file://:0:0:0:0 | Object |
|
||||
| tst.rb:57:1:62:3 | Nodes | tst.rb:57:1:62:3 | Nodes |
|
||||
getModuleLevelSelf
|
||||
| tst.rb:13:1:18:3 | Mixin | tst.rb:13:1:18:3 | self (Mixin) |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | tst.rb:20:1:25:3 | self (Mixin2) |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:27:1:35:3 | self (C3) |
|
||||
| tst.rb:49:1:51:3 | N2 | tst.rb:49:1:51:3 | self (N2) |
|
||||
getAnImmediateReference
|
||||
| file://:0:0:0:0 | Array | tst.rb:59:15:59:21 | Array |
|
||||
| file://:0:0:0:0 | Hash | tst.rb:60:14:60:45 | Hash |
|
||||
| tst.rb:1:1:6:3 | C1 | tst.rb:8:12:8:13 | C1 |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:27:12:27:13 | C2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | tst.rb:28:13:28:17 | Mixin |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | tst.rb:29:13:29:18 | Mixin2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:37:5:37:6 | C3 |
|
||||
getOwnInstanceMethod
|
||||
| tst.rb:1:1:6:3 | C1 | c1 | tst.rb:2:5:5:7 | c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | c2 | tst.rb:9:5:10:7 | c2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | m1 | tst.rb:14:5:15:7 | m1 |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | m2 | tst.rb:21:5:22:7 | m2 |
|
||||
| tst.rb:57:1:62:3 | Nodes | m1 | tst.rb:58:5:61:7 | m1 |
|
||||
getInstanceMethod
|
||||
| tst.rb:1:1:6:3 | C1 | c1 | tst.rb:2:5:5:7 | c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | c1 | tst.rb:2:5:5:7 | c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | c2 | tst.rb:9:5:10:7 | c2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | m1 | tst.rb:14:5:15:7 | m1 |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | m2 | tst.rb:21:5:22:7 | m2 |
|
||||
| tst.rb:27:1:35:3 | C3 | c1 | tst.rb:2:5:5:7 | c1 |
|
||||
| tst.rb:27:1:35:3 | C3 | c2 | tst.rb:9:5:10:7 | c2 |
|
||||
| tst.rb:27:1:35:3 | C3 | m1 | tst.rb:14:5:15:7 | m1 |
|
||||
| tst.rb:27:1:35:3 | C3 | m2 | tst.rb:21:5:22:7 | m2 |
|
||||
| tst.rb:57:1:62:3 | Nodes | m1 | tst.rb:58:5:61:7 | m1 |
|
||||
getAnOwnInstanceSelf
|
||||
| tst.rb:1:1:6:3 | C1 | tst.rb:2:5:5:7 | self in c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:9:5:10:7 | self in c2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | tst.rb:14:5:15:7 | self in m1 |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | tst.rb:21:5:22:7 | self in m2 |
|
||||
| tst.rb:57:1:62:3 | Nodes | tst.rb:58:5:61:7 | self in m1 |
|
||||
getAnInstanceSelf
|
||||
| tst.rb:1:1:6:3 | C1 | tst.rb:2:5:5:7 | self in c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:2:5:5:7 | self in c1 |
|
||||
| tst.rb:8:1:11:3 | C2 | tst.rb:9:5:10:7 | self in c2 |
|
||||
| tst.rb:13:1:18:3 | Mixin | tst.rb:14:5:15:7 | self in m1 |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | tst.rb:21:5:22:7 | self in m2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:2:5:5:7 | self in c1 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:9:5:10:7 | self in c2 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:14:5:15:7 | self in m1 |
|
||||
| tst.rb:27:1:35:3 | C3 | tst.rb:21:5:22:7 | self in m2 |
|
||||
| tst.rb:57:1:62:3 | Nodes | tst.rb:58:5:61:7 | self in m1 |
|
||||
getOwnSingletonMethod
|
||||
| tst.rb:13:1:18:3 | Mixin | m1s | tst.rb:16:5:17:7 | m1s |
|
||||
| tst.rb:20:1:25:3 | Mixin2 | m2s | tst.rb:23:5:24:7 | m2s |
|
||||
| tst.rb:27:1:35:3 | C3 | c3_self1 | tst.rb:32:9:33:11 | c3_self1 |
|
||||
| tst.rb:27:1:35:3 | C3 | c3_self2 | tst.rb:37:1:38:3 | c3_self2 |
|
||||
getAnOwnInstanceVariableRead
|
||||
| tst.rb:1:1:6:3 | C1 | @field | tst.rb:4:9:4:14 | @field |
|
||||
getAnOwnInstanceVariableWriteValue
|
||||
| tst.rb:1:1:6:3 | C1 | @field | tst.rb:3:18:3:18 | 1 |
|
||||
getCanonicalEnclosingModule
|
||||
| tst.rb:41:5:42:7 | N1::XY1 | tst.rb:40:1:47:3 | N1 |
|
||||
| tst.rb:43:5:46:7 | N1::N2 | tst.rb:40:1:47:3 | N1 |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 | tst.rb:43:5:46:7 | N1::N2 |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 | tst.rb:49:1:51:3 | N2 |
|
||||
getCanonicalNestedModule
|
||||
| tst.rb:40:1:47:3 | N1 | N2 | tst.rb:43:5:46:7 | N1::N2 |
|
||||
| tst.rb:40:1:47:3 | N1 | XY1 | tst.rb:41:5:42:7 | N1::XY1 |
|
||||
| tst.rb:43:5:46:7 | N1::N2 | XY2 | tst.rb:44:9:45:11 | N1::N2::XY2 |
|
||||
| tst.rb:49:1:51:3 | N2 | XY3 | tst.rb:53:5:54:7 | N2::XY3 |
|
||||
getTopLevelConst
|
||||
| Array | tst.rb:59:15:59:21 | Array |
|
||||
| C1 | tst.rb:1:1:6:3 | C1 |
|
||||
| C1 | tst.rb:8:12:8:13 | C1 |
|
||||
| C2 | tst.rb:8:1:11:3 | C2 |
|
||||
| C2 | tst.rb:27:12:27:13 | C2 |
|
||||
| C3 | tst.rb:27:1:35:3 | self (C3) |
|
||||
| C3 | tst.rb:37:5:37:6 | C3 |
|
||||
| Hash | tst.rb:60:14:60:45 | Hash |
|
||||
| Mixin | tst.rb:13:1:18:3 | self (Mixin) |
|
||||
| Mixin | tst.rb:28:13:28:17 | Mixin |
|
||||
| Mixin2 | tst.rb:20:1:25:3 | self (Mixin2) |
|
||||
| Mixin2 | tst.rb:29:13:29:18 | Mixin2 |
|
||||
| N1 | tst.rb:40:1:47:3 | N1 |
|
||||
| N2 | tst.rb:43:5:46:7 | N2 |
|
||||
| N2 | tst.rb:49:1:51:3 | self (N2) |
|
||||
| N2 | tst.rb:52:1:55:3 | N2 |
|
||||
| Nodes | tst.rb:57:1:62:3 | Nodes |
|
||||
| X | tst.rb:41:17:41:17 | X |
|
||||
| X | tst.rb:44:21:44:21 | X |
|
||||
| X | tst.rb:50:13:50:13 | X |
|
||||
| XY1 | tst.rb:41:5:42:7 | XY1 |
|
||||
| XY2 | tst.rb:44:9:45:11 | XY2 |
|
||||
| XY3 | tst.rb:53:5:54:7 | XY3 |
|
||||
| Y | tst.rb:53:17:53:17 | Y |
|
||||
getConst
|
||||
| tst.rb:41:17:41:17 | X | Y | tst.rb:41:17:41:20 | Y |
|
||||
| tst.rb:44:21:44:21 | X | Y | tst.rb:44:21:44:24 | Y |
|
||||
| tst.rb:50:13:50:13 | X | X | tst.rb:50:13:50:13 | X |
|
||||
| tst.rb:50:13:50:13 | X | XY3 | tst.rb:53:5:54:7 | XY3 |
|
||||
| tst.rb:50:13:50:13 | X | Y | tst.rb:53:17:53:17 | Y |
|
||||
getXYClasses
|
||||
| tst.rb:41:5:42:7 | N1::XY1 |
|
||||
| tst.rb:44:9:45:11 | N1::N2::XY2 |
|
||||
| tst.rb:53:5:54:7 | N2::XY3 |
|
||||
hashLiteralNode
|
||||
| tst.rb:60:14:60:45 | call to [] |
|
||||
hashLiteralKey
|
||||
| tst.rb:60:14:60:45 | call to [] | bar | tst.rb:60:36:60:36 | 2 |
|
||||
| tst.rb:60:14:60:45 | call to [] | baz | tst.rb:60:44:60:44 | 3 |
|
||||
| tst.rb:60:14:60:45 | call to [] | foo | tst.rb:60:24:60:24 | 1 |
|
||||
arrayLiteralNode
|
||||
| tst.rb:59:15:59:21 | call to [] |
|
||||
arrayLiteralElement
|
||||
| tst.rb:59:15:59:21 | call to [] | tst.rb:59:16:59:16 | 1 |
|
||||
| tst.rb:59:15:59:21 | call to [] | tst.rb:59:18:59:18 | 2 |
|
||||
| tst.rb:59:15:59:21 | call to [] | tst.rb:59:20:59:20 | 3 |
|
||||
71
ruby/ql/test/library-tests/dataflow/helpers/dataflow.ql
Normal file
71
ruby/ql/test/library-tests/dataflow/helpers/dataflow.ql
Normal file
@@ -0,0 +1,71 @@
|
||||
import ruby
|
||||
|
||||
query DataFlow::Node getAnAncestorExpr(DataFlow::ModuleNode mod) {
|
||||
result = mod.getAnAncestorExpr()
|
||||
}
|
||||
|
||||
query DataFlow::ModuleNode getAnAncestor(DataFlow::ModuleNode mod) { result = mod.getAnAncestor() }
|
||||
|
||||
query DataFlow::Node getModuleLevelSelf(DataFlow::ModuleNode mod) {
|
||||
result = mod.getModuleLevelSelf()
|
||||
}
|
||||
|
||||
query DataFlow::Node getAnImmediateReference(DataFlow::ModuleNode mod) {
|
||||
result = mod.getAnImmediateReference()
|
||||
}
|
||||
|
||||
query DataFlow::MethodNode getOwnInstanceMethod(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getOwnInstanceMethod(name)
|
||||
}
|
||||
|
||||
query DataFlow::MethodNode getInstanceMethod(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getInstanceMethod(name)
|
||||
}
|
||||
|
||||
query DataFlow::Node getAnOwnInstanceSelf(DataFlow::ModuleNode mod) {
|
||||
result = mod.getAnOwnInstanceSelf()
|
||||
}
|
||||
|
||||
query DataFlow::Node getAnInstanceSelf(DataFlow::ModuleNode mod) {
|
||||
result = mod.getAnInstanceSelf()
|
||||
}
|
||||
|
||||
query DataFlow::Node getOwnSingletonMethod(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getOwnSingletonMethod(name)
|
||||
}
|
||||
|
||||
query DataFlow::Node getAnOwnInstanceVariableRead(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getAnOwnInstanceVariableRead(name)
|
||||
}
|
||||
|
||||
query DataFlow::Node getAnOwnInstanceVariableWriteValue(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getAnOwnInstanceVariableWriteValue(name)
|
||||
}
|
||||
|
||||
query DataFlow::ModuleNode getCanonicalEnclosingModule(DataFlow::ModuleNode mod) {
|
||||
result = mod.getCanonicalEnclosingModule()
|
||||
}
|
||||
|
||||
query DataFlow::ModuleNode getCanonicalNestedModule(DataFlow::ModuleNode mod, string name) {
|
||||
result = mod.getCanonicalNestedModule(name)
|
||||
}
|
||||
|
||||
query DataFlow::Node getTopLevelConst(string name) { result = DataFlow::getConst(name) }
|
||||
|
||||
query DataFlow::Node getConst(DataFlow::ConstRef base, string name) { result = base.getConst(name) }
|
||||
|
||||
query DataFlow::ModuleNode getXYClasses() {
|
||||
result = DataFlow::getConst("X").getConst("Y").getADescendentModule()
|
||||
}
|
||||
|
||||
query DataFlow::HashLiteralNode hashLiteralNode() { any() }
|
||||
|
||||
query DataFlow::Node hashLiteralKey(DataFlow::HashLiteralNode node, string key) {
|
||||
result = node.getElementFromKey(Ast::ConstantValue::getStringlikeValue(key))
|
||||
}
|
||||
|
||||
query DataFlow::ArrayLiteralNode arrayLiteralNode() { any() }
|
||||
|
||||
query DataFlow::Node arrayLiteralElement(DataFlow::ArrayLiteralNode node) {
|
||||
result = node.getAnElement()
|
||||
}
|
||||
62
ruby/ql/test/library-tests/dataflow/helpers/tst.rb
Normal file
62
ruby/ql/test/library-tests/dataflow/helpers/tst.rb
Normal file
@@ -0,0 +1,62 @@
|
||||
module C1
|
||||
def c1
|
||||
@field = 1
|
||||
@field
|
||||
end
|
||||
end
|
||||
|
||||
class C2 < C1
|
||||
def c2
|
||||
end
|
||||
end
|
||||
|
||||
module Mixin
|
||||
def m1
|
||||
end
|
||||
def self.m1s
|
||||
end
|
||||
end
|
||||
|
||||
module Mixin2
|
||||
def m2
|
||||
end
|
||||
def self.m2s
|
||||
end
|
||||
end
|
||||
|
||||
class C3 < C2
|
||||
include Mixin
|
||||
prepend Mixin2
|
||||
|
||||
class << self
|
||||
def c3_self1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def C3.c3_self2
|
||||
end
|
||||
|
||||
module N1
|
||||
class XY1 < X::Y
|
||||
end
|
||||
module N2
|
||||
class XY2 < X::Y
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module N2
|
||||
include X
|
||||
end
|
||||
module N2
|
||||
class XY3 < Y
|
||||
end
|
||||
end
|
||||
|
||||
class Nodes
|
||||
def m1
|
||||
array=[1,2,3]
|
||||
hash={'foo' => 1, 'bar' => 2, baz: 3}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user