From c745978ebbac8c603a49c729e0052e0b07e7693b Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 23 Nov 2020 14:27:40 +0100 Subject: [PATCH] Fix inconsistent variable references --- ql/src/codeql_ruby/Variables.qll | 44 +++++--- ql/test/library-tests/variables/parameters.rb | 58 ++++++++++ .../variables/varaccess.expected | 102 ++++++++++++++++++ .../library-tests/variables/variable.expected | 46 ++++++++ .../variables/varscopes.expected | 13 +++ 5 files changed, 247 insertions(+), 16 deletions(-) create mode 100644 ql/test/library-tests/variables/parameters.rb diff --git a/ql/src/codeql_ruby/Variables.qll b/ql/src/codeql_ruby/Variables.qll index 0cb83aaee41..f605e0c272e 100644 --- a/ql/src/codeql_ruby/Variables.qll +++ b/ql/src/codeql_ruby/Variables.qll @@ -13,24 +13,36 @@ private VariableScope enclosingScope(AstNode node) { result.getScopeElement() = parent*(node.getParent()) } +private string parameterName(AstNode node) { + result = node.(Identifier).getValue() or + result = node.(SplatParameter).getName().getValue() or + result = node.(HashSplatParameter).getName().getValue() or + result = node.(BlockParameter).getName().getValue() or + result = node.(OptionalParameter).getName().getValue() or + result = node.(KeywordParameter).getName().getValue() or + result = parameterName(node.(DestructuredParameter).getAFieldOrChild()) +} + /** Holds if `scope` defines `name` as a parameter. */ private predicate scopeDefinesParameter(VariableScope scope, string name, Location location) { - exists(Identifier var | - name = var.getValue() and - location = var.getLocation() and - var in [scope - .(BlockScope) - .getScopeElement() - .getAFieldOrChild() - .(BlockParameters) - .getAFieldOrChild+(), - scope - .(MethodScope) - .getScopeElement() - .getAFieldOrChild() - .(MethodParameters) - .getAFieldOrChild+()] - ) + location = + min(AstNode var | + name = parameterName(var) and + var in [scope + .(BlockScope) + .getScopeElement() + .getAFieldOrChild() + .(BlockParameters) + .getAFieldOrChild(), + scope + .(MethodScope) + .getScopeElement() + .getAFieldOrChild() + .(MethodParameters) + .getAFieldOrChild()] + | + var.getLocation() as loc order by loc.getStartLine(), loc.getStartColumn() + ) } /** Holds if `var` is assigned in `scope`. */ diff --git a/ql/test/library-tests/variables/parameters.rb b/ql/test/library-tests/variables/parameters.rb new file mode 100644 index 00000000000..99aff4df5ae --- /dev/null +++ b/ql/test/library-tests/variables/parameters.rb @@ -0,0 +1,58 @@ +1.times do | x ; y| + y = 5 + puts x + puts y +end + +def order_pizza(client, *pizzas) + if pizzas.count == 1 + puts "1 pizza for #{client}!" + else + puts "#{ pizzas.count} pizzas for #{client}!" + end +end + +def print_map(**map) + map.each do |key, value| + puts "#{key} = #{value}" + end +end + +def call_block(&block) + block.call +end + +def opt_param(name = 'unknown', size = name.length) + puts name + puts size +end + +def key_param(first: , middle: '', last:) + puts "#{first} #{middle} #{last}" +end + +b = 2 +def multi(a = (b = 5)) + # `a` is a parameter and `b` is a new variable + puts "#{a} #{b}" +end + +def multi2(d: e = 4) + # `d` is a parameter and `e` is a local variable + puts "#{d} #{e}" +end + +def dup_underscore(_,_) + puts _ # binds to the first _ +end + +def tuples((a,b)) + puts "#{a} #{b}" +end + +x = 10 +1.times do | y = (x = 1)| + puts x + puts y +end + diff --git a/ql/test/library-tests/variables/varaccess.expected b/ql/test/library-tests/variables/varaccess.expected index 899db88f637..44ae78509d7 100644 --- a/ql/test/library-tests/variables/varaccess.expected +++ b/ql/test/library-tests/variables/varaccess.expected @@ -24,6 +24,57 @@ variableAccess | nested_scopes.rb:38:8:38:8 | a | nested_scopes.rb:5:3:5:3 | a | nested_scopes.rb:4:1:39:3 | class scope | | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:1:1:42:1 | top-level scope | | nested_scopes.rb:41:1:41:1 | d | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:1:1:42:1 | top-level scope | +| parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:1:18:1:18 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:2:4:2:4 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:3:9:3:9 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:4:9:4:9 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:9:25:9:30 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:11:41:11:46 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:15:17:15:19 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope | +| parameters.rb:16:3:16:5 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope | +| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:17:13:17:15 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:17:22:17:26 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:21:17:21:21 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope | +| parameters.rb:22:3:22:7 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope | +| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:34:1:34:1 | b | parameters.rb:34:1:34:1 | b | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:35:16:35:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:37:16:37:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:40:15:40:15 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:42:16:42:16 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:45:22:45:22 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:46:8:46:8 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:49:13:49:13 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:49:15:49:15 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:50:11:50:11 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:50:16:50:16 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:53:1:53:1 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope | +| parameters.rb:54:19:54:19 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:55:9:55:9 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope | | scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x | scopes.rb:2:9:6:3 | block scope | | scopes.rb:4:4:4:4 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope | | scopes.rb:5:9:5:9 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope | @@ -44,6 +95,49 @@ parameterAccess | nested_scopes.rb:18:34:18:34 | a | nested_scopes.rb:16:29:16:29 | a | nested_scopes.rb:16:21:19:15 | block scope | | nested_scopes.rb:22:21:22:21 | a | nested_scopes.rb:22:21:22:21 | a | nested_scopes.rb:22:9:24:11 | method scope | | nested_scopes.rb:23:16:23:16 | a | nested_scopes.rb:22:21:22:21 | a | nested_scopes.rb:22:9:24:11 | method scope | +| parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:1:18:1:18 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:2:4:2:4 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:3:9:3:9 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:4:9:4:9 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope | +| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:9:25:9:30 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:25:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:11:41:11:46 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope | +| parameters.rb:15:17:15:19 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope | +| parameters.rb:16:3:16:5 | map | parameters.rb:15:15:15:19 | map | parameters.rb:15:1:19:3 | method scope | +| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:17:13:17:15 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:17:22:17:26 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope | +| parameters.rb:21:17:21:21 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope | +| parameters.rb:22:3:22:7 | block | parameters.rb:21:16:21:21 | block | parameters.rb:21:1:23:3 | method scope | +| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:25:40:25:43 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:26:8:26:11 | name | parameters.rb:25:15:25:30 | name | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:27:8:27:11 | size | parameters.rb:25:33:25:50 | size | parameters.rb:25:1:28:3 | method scope | +| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:11:31:15 | first | parameters.rb:30:15:30:20 | first | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:20:31:25 | middle | parameters.rb:30:24:30:33 | middle | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:31:30:31:33 | last | parameters.rb:30:36:30:40 | last | parameters.rb:30:1:32:3 | method scope | +| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:37:11:37:11 | a | parameters.rb:35:11:35:21 | a | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:42:11:42:11 | d | parameters.rb:40:12:40:19 | d | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:45:22:45:22 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:46:8:46:8 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:45:1:47:3 | method scope | +| parameters.rb:49:13:49:13 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:49:15:49:15 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:50:11:50:11 | a | parameters.rb:49:12:49:16 | a | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:50:16:50:16 | b | parameters.rb:49:12:49:16 | b | parameters.rb:49:1:51:3 | method scope | +| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope | +| parameters.rb:56:9:56:9 | y | parameters.rb:54:14:54:24 | y | parameters.rb:54:9:57:3 | block scope | | scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x | scopes.rb:2:9:6:3 | block scope | | scopes.rb:9:14:9:14 | x | scopes.rb:9:14:9:14 | x | scopes.rb:9:9:13:3 | block scope | localVariableAccess @@ -62,6 +156,14 @@ localVariableAccess | nested_scopes.rb:38:8:38:8 | a | nested_scopes.rb:5:3:5:3 | a | nested_scopes.rb:4:1:39:3 | class scope | | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:1:1:42:1 | top-level scope | | nested_scopes.rb:41:1:41:1 | d | nested_scopes.rb:40:1:40:1 | d | nested_scopes.rb:1:1:42:1 | top-level scope | +| parameters.rb:34:1:34:1 | b | parameters.rb:34:1:34:1 | b | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:35:16:35:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:37:16:37:16 | b | parameters.rb:35:16:35:16 | b | parameters.rb:35:1:38:3 | method scope | +| parameters.rb:40:15:40:15 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:42:16:42:16 | e | parameters.rb:40:15:40:15 | e | parameters.rb:40:1:43:3 | method scope | +| parameters.rb:53:1:53:1 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:54:19:54:19 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:55:9:55:9 | x | parameters.rb:53:1:53:1 | x | parameters.rb:1:1:58:1 | top-level scope | | scopes.rb:4:4:4:4 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope | | scopes.rb:5:9:5:9 | a | scopes.rb:4:4:4:4 | a | scopes.rb:2:9:6:3 | block scope | | scopes.rb:7:1:7:1 | a | scopes.rb:7:1:7:1 | a | scopes.rb:1:1:13:3 | top-level scope | diff --git a/ql/test/library-tests/variables/variable.expected b/ql/test/library-tests/variables/variable.expected index 6d2277e0b14..4010f77dd66 100644 --- a/ql/test/library-tests/variables/variable.expected +++ b/ql/test/library-tests/variables/variable.expected @@ -11,6 +11,29 @@ variable | nested_scopes.rb:22:21:22:21 | a | | nested_scopes.rb:31:11:31:11 | a | | nested_scopes.rb:40:1:40:1 | d | +| parameters.rb:1:14:1:14 | x | +| parameters.rb:1:18:1:18 | y | +| parameters.rb:7:17:7:22 | client | +| parameters.rb:7:25:7:31 | pizzas | +| parameters.rb:15:15:15:19 | map | +| parameters.rb:16:16:16:18 | key | +| parameters.rb:16:21:16:25 | value | +| parameters.rb:21:16:21:21 | block | +| parameters.rb:25:15:25:30 | name | +| parameters.rb:25:33:25:50 | size | +| parameters.rb:30:15:30:20 | first | +| parameters.rb:30:24:30:33 | middle | +| parameters.rb:30:36:30:40 | last | +| parameters.rb:34:1:34:1 | b | +| parameters.rb:35:11:35:21 | a | +| parameters.rb:35:16:35:16 | b | +| parameters.rb:40:12:40:19 | d | +| parameters.rb:40:15:40:15 | e | +| parameters.rb:45:20:45:20 | _ | +| parameters.rb:49:12:49:16 | a | +| parameters.rb:49:12:49:16 | b | +| parameters.rb:53:1:53:1 | x | +| parameters.rb:54:14:54:24 | y | | scopes.rb:2:14:2:14 | x | | scopes.rb:4:4:4:4 | a | | scopes.rb:7:1:7:1 | a | @@ -21,6 +44,25 @@ parameter | nested_scopes.rb:16:29:16:29 | a | | nested_scopes.rb:18:26:18:26 | x | | nested_scopes.rb:22:21:22:21 | a | +| parameters.rb:1:14:1:14 | x | +| parameters.rb:1:18:1:18 | y | +| parameters.rb:7:17:7:22 | client | +| parameters.rb:7:25:7:31 | pizzas | +| parameters.rb:15:15:15:19 | map | +| parameters.rb:16:16:16:18 | key | +| parameters.rb:16:21:16:25 | value | +| parameters.rb:21:16:21:21 | block | +| parameters.rb:25:15:25:30 | name | +| parameters.rb:25:33:25:50 | size | +| parameters.rb:30:15:30:20 | first | +| parameters.rb:30:24:30:33 | middle | +| parameters.rb:30:36:30:40 | last | +| parameters.rb:35:11:35:21 | a | +| parameters.rb:40:12:40:19 | d | +| parameters.rb:45:20:45:20 | _ | +| parameters.rb:49:12:49:16 | a | +| parameters.rb:49:12:49:16 | b | +| parameters.rb:54:14:54:24 | y | | scopes.rb:2:14:2:14 | x | | scopes.rb:9:14:9:14 | x | localVariable @@ -31,5 +73,9 @@ localVariable | nested_scopes.rb:13:11:13:11 | a | | nested_scopes.rb:31:11:31:11 | a | | nested_scopes.rb:40:1:40:1 | d | +| parameters.rb:34:1:34:1 | b | +| parameters.rb:35:16:35:16 | b | +| parameters.rb:40:15:40:15 | e | +| parameters.rb:53:1:53:1 | x | | scopes.rb:4:4:4:4 | a | | scopes.rb:7:1:7:1 | a | diff --git a/ql/test/library-tests/variables/varscopes.expected b/ql/test/library-tests/variables/varscopes.expected index 88a58f78a71..7a09f598183 100644 --- a/ql/test/library-tests/variables/varscopes.expected +++ b/ql/test/library-tests/variables/varscopes.expected @@ -11,6 +11,19 @@ | nested_scopes.rb:22:9:24:11 | method scope | | nested_scopes.rb:27:7:29:9 | method scope | | nested_scopes.rb:30:7:33:9 | class scope | +| parameters.rb:1:1:58:1 | top-level scope | +| parameters.rb:1:9:5:3 | block scope | +| parameters.rb:7:1:13:3 | method scope | +| parameters.rb:15:1:19:3 | method scope | +| parameters.rb:16:12:18:5 | block scope | +| parameters.rb:21:1:23:3 | method scope | +| parameters.rb:25:1:28:3 | method scope | +| parameters.rb:30:1:32:3 | method scope | +| parameters.rb:35:1:38:3 | method scope | +| parameters.rb:40:1:43:3 | method scope | +| parameters.rb:45:1:47:3 | method scope | +| parameters.rb:49:1:51:3 | method scope | +| parameters.rb:54:9:57:3 | block scope | | scopes.rb:1:1:1:15 | method scope | | scopes.rb:1:1:13:3 | top-level scope | | scopes.rb:2:9:6:3 | block scope |