Skip to content

Commit d1d1790

Browse files
committed
Fix WithScope for destructured post arguments
1 parent ff67961 commit d1d1790

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

lib/syntax_tree/node.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -8277,7 +8277,7 @@ def format(q)
82778277
# parameter
82788278
attr_reader :rest
82798279

8280-
# [Array[ Ident ]] any positional parameters that exist after a rest
8280+
# [Array[ Ident | MLHSParen ]] any positional parameters that exist after a rest
82818281
# parameter
82828282
attr_reader :posts
82838283

lib/syntax_tree/with_scope.rb

+7-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,13 @@ def visit_params(node)
154154
add_argument_definitions(node.requireds)
155155

156156
node.posts.each do |param|
157-
current_scope.add_local_definition(param, :argument)
157+
if param.is_a?(SyntaxTree::MLHSParen)
158+
param.contents.parts.each do |part|
159+
current_scope.add_local_definition(part, :argument)
160+
end
161+
else
162+
current_scope.add_local_definition(param, :argument)
163+
end
158164
end
159165

160166
node.keywords.each do |param|

test/with_scope_test.rb

+12
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,18 @@ def foo(a)
154154
assert_argument(collector, "a", definitions: [1], usages: [2])
155155
end
156156

157+
def test_collecting_methods_with_destructured_post_arguments
158+
collector = Collector.collect(<<~RUBY)
159+
def foo(optional = 1, (bin, bag))
160+
end
161+
RUBY
162+
163+
assert_equal(3, collector.arguments.length)
164+
assert_argument(collector, "optional", definitions: [1], usages: [])
165+
assert_argument(collector, "bin", definitions: [1], usages: [])
166+
assert_argument(collector, "bag", definitions: [1], usages: [])
167+
end
168+
157169
def test_collecting_singleton_method_arguments
158170
collector = Collector.collect(<<~RUBY)
159171
def self.foo(a)

0 commit comments

Comments
 (0)