Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 0d565b0

Browse files
committedJul 12, 2023
Fix WithScope for destructured post arguments
1 parent ff67961 commit 0d565b0

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed
 

‎lib/syntax_tree/node.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8277,8 +8277,8 @@ def format(q)
82778277
# parameter
82788278
attr_reader :rest
82798279

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

82848284
# [Array[ [ Label, nil | Node ] ]] any keyword parameters and their

‎lib/syntax_tree/with_scope.rb

Lines changed: 7 additions & 1 deletion
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

Lines changed: 12 additions & 0 deletions
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)
Please sign in to comment.