[ruby/prism] Fix it parameters for parser translation

https://github.com/ruby/prism/commit/2f3feb8d51
This commit is contained in:
Kevin Newton 2024-04-19 10:24:26 -04:00 committed by git
parent 6cfd929034
commit 2e80ceb6ff

View File

@ -1030,6 +1030,12 @@ module Prism
end
end
# -> { it }
# ^^^^^^^^^
def visit_it_parameters_node(node)
builder.args(nil, [], nil, false)
end
# foo(bar: baz)
# ^^^^^^^^
def visit_keyword_hash_node(node)
@ -1052,13 +1058,14 @@ module Prism
# ^^^^^
def visit_lambda_node(node)
parameters = node.parameters
implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
builder.block(
builder.call_lambda(token(node.operator_loc)),
[node.opening, srange(node.opening_loc)],
if parameters.nil?
builder.args(nil, [], nil, false)
elsif node.parameters.is_a?(NumberedParametersNode)
elsif implicit_parameters
visit(node.parameters)
else
builder.args(
@ -1068,7 +1075,7 @@ module Prism
false
)
end,
node.body&.accept(copy_compiler(forwarding: parameters.is_a?(NumberedParametersNode) ? [] : find_forwarding(parameters&.parameters))),
node.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
[node.closing, srange(node.closing_loc)]
)
end
@ -1076,7 +1083,14 @@ module Prism
# foo
# ^^^
def visit_local_variable_read_node(node)
builder.ident([node.name, srange(node.location)]).updated(:lvar)
name = node.name
# This is just a guess. parser doesn't have support for the implicit
# `it` variable yet, so we'll probably have to visit this once it
# does.
name = :it if name == :"0it"
builder.ident([name, srange(node.location)]).updated(:lvar)
end
# foo = 1
@ -1875,13 +1889,14 @@ module Prism
def visit_block(call, block)
if block
parameters = block.parameters
implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
builder.block(
call,
token(block.opening_loc),
if parameters.nil?
builder.args(nil, [], nil, false)
elsif parameters.is_a?(NumberedParametersNode)
elsif implicit_parameters
visit(parameters)
else
builder.args(
@ -1896,7 +1911,7 @@ module Prism
false
)
end,
block.body&.accept(copy_compiler(forwarding: parameters.is_a?(NumberedParametersNode) ? [] : find_forwarding(parameters&.parameters))),
block.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
token(block.closing_loc)
)
else