Skip to content

Commit 7034e68

Browse files
authored
Merge pull request #173 from vinistock/vs/fix_with_environment_references
Fix current_environment usages to use accessor instead of instance variable
2 parents 45b1d28 + f924f9d commit 7034e68

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

lib/syntax_tree/visitor/with_environment.rb

+11-11
Original file line numberDiff line numberDiff line change
@@ -64,41 +64,41 @@ def visit_def_endless(node)
6464
# arguments
6565
def visit_params(node)
6666
node.requireds.each do |param|
67-
@current_environment.add_local_definition(param, :argument)
67+
current_environment.add_local_definition(param, :argument)
6868
end
6969

7070
node.posts.each do |param|
71-
@current_environment.add_local_definition(param, :argument)
71+
current_environment.add_local_definition(param, :argument)
7272
end
7373

7474
node.keywords.each do |param|
75-
@current_environment.add_local_definition(param.first, :argument)
75+
current_environment.add_local_definition(param.first, :argument)
7676
end
7777

7878
node.optionals.each do |param|
79-
@current_environment.add_local_definition(param.first, :argument)
79+
current_environment.add_local_definition(param.first, :argument)
8080
end
8181

8282
super
8383
end
8484

8585
def visit_rest_param(node)
8686
name = node.name
87-
@current_environment.add_local_definition(name, :argument) if name
87+
current_environment.add_local_definition(name, :argument) if name
8888

8989
super
9090
end
9191

9292
def visit_kwrest_param(node)
9393
name = node.name
94-
@current_environment.add_local_definition(name, :argument) if name
94+
current_environment.add_local_definition(name, :argument) if name
9595

9696
super
9797
end
9898

9999
def visit_blockarg(node)
100100
name = node.name
101-
@current_environment.add_local_definition(name, :argument) if name
101+
current_environment.add_local_definition(name, :argument) if name
102102

103103
super
104104
end
@@ -108,7 +108,7 @@ def visit_var_field(node)
108108
value = node.value
109109

110110
if value.is_a?(SyntaxTree::Ident)
111-
@current_environment.add_local_definition(value, :variable)
111+
current_environment.add_local_definition(value, :variable)
112112
end
113113

114114
super
@@ -119,7 +119,7 @@ def visit_var_field(node)
119119
# Visits for keeping track of variable and argument usages
120120
def visit_aref_field(node)
121121
name = node.collection.value
122-
@current_environment.add_local_usage(name, :variable) if name
122+
current_environment.add_local_usage(name, :variable) if name
123123

124124
super
125125
end
@@ -128,10 +128,10 @@ def visit_var_ref(node)
128128
value = node.value
129129

130130
if value.is_a?(SyntaxTree::Ident)
131-
definition = @current_environment.find_local(value.value)
131+
definition = current_environment.find_local(value.value)
132132

133133
if definition
134-
@current_environment.add_local_usage(value, definition.type)
134+
current_environment.add_local_usage(value, definition.type)
135135
end
136136
end
137137

test/visitor_with_environment_test.rb

+20
Original file line numberDiff line numberDiff line change
@@ -406,5 +406,25 @@ def foo(a)
406406
assert_equal(2, argument.usages[0].start_line)
407407
assert_equal(4, argument.usages[1].start_line)
408408
end
409+
410+
def test_variables_in_the_top_level
411+
tree = SyntaxTree.parse(<<~RUBY)
412+
a = 123
413+
a
414+
RUBY
415+
416+
visitor = Collector.new
417+
visitor.visit(tree)
418+
419+
assert_equal(0, visitor.arguments.length)
420+
assert_equal(1, visitor.variables.length)
421+
422+
variable = visitor.variables["a"]
423+
assert_equal(1, variable.definitions.length)
424+
assert_equal(1, variable.usages.length)
425+
426+
assert_equal(1, variable.definitions[0].start_line)
427+
assert_equal(2, variable.usages[0].start_line)
428+
end
409429
end
410430
end

0 commit comments

Comments
 (0)