summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 00:50:32 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:37 +0000
commit069568dbfcff5bc13551b14e864c0a4b2bd90811 (patch)
tree9a80461cb9eed206e35d65b84a694fb129e7ae56 /lib
parentb797085c384e7443698e29bd97b2b32806cd9792 (diff)
[ruby/prism] Implement so many ripper visitor methods
https://github.com/ruby/prism/commit/336bd7249a
Diffstat (limited to 'lib')
-rw-r--r--lib/prism/translation/ripper.rb67
1 files changed, 56 insertions, 11 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb
index 799de0e176..88ce546fdc 100644
--- a/lib/prism/translation/ripper.rb
+++ b/lib/prism/translation/ripper.rb
@@ -343,14 +343,23 @@ module Prism
when "do"
on_do_block(params_val, on_bodystmt(body_val, nil, nil, nil))
else
- raise raise
+ raise
end
end
# def foo(&bar); end
# ^^^^
def visit_block_parameter_node(node)
- raise NoMethodError, __method__
+ if node.name_loc.nil?
+ bounds(node.location)
+ on_blockarg(nil)
+ else
+ bounds(node.name_loc)
+ name = visit_token(node.name.to_s)
+
+ bounds(node.location)
+ on_blockarg(name)
+ end
end
# A block's parameters.
@@ -1035,7 +1044,16 @@ module Prism
# def foo(**); end
# ^^
def visit_keyword_rest_parameter_node(node)
- raise NoMethodError, __method__
+ if node.name_loc.nil?
+ bounds(node.location)
+ on_kwrest_param(nil)
+ else
+ bounds(node.name_loc)
+ name = on_ident(node.name.to_s)
+
+ bounds(node.location)
+ on_kwrest_param(name)
+ end
end
# -> {}
@@ -1118,13 +1136,19 @@ module Prism
# foo in bar
# ^^^^^^^^^^
def visit_match_predicate_node(node)
- raise NoMethodError, __method__
+ value = visit(node.value)
+ pattern = on_in(visit(node.pattern), nil, nil)
+
+ on_case(value, pattern)
end
# foo => bar
# ^^^^^^^^^^
def visit_match_required_node(node)
- raise NoMethodError, __method__
+ value = visit(node.value)
+ pattern = on_in(visit(node.pattern), nil, nil)
+
+ on_case(value, pattern)
end
# /(?<foo>foo)/ =~ bar
@@ -1193,13 +1217,21 @@ module Prism
# def foo(bar: baz); end
# ^^^^^^^^
def visit_optional_keyword_parameter_node(node)
- raise NoMethodError, __method__
+ bounds(node.name_loc)
+ name = on_label("#{node.name}:")
+ value = visit(node.value)
+
+ [name, value]
end
# def foo(bar = 1); end
# ^^^^^^^
def visit_optional_parameter_node(node)
- raise NoMethodError, __method__
+ bounds(node.name_loc)
+ name = visit_token(node.name.to_s)
+ value = visit(node.value)
+
+ [name, value]
end
# a or b
@@ -1215,9 +1247,15 @@ module Prism
# def foo(bar, *baz); end
# ^^^^^^^^^
def visit_parameters_node(node)
- requireds = visit_all(node.requireds)
+ requireds = visit_all(node.requireds) if node.requireds.any?
+ optionals = visit_all(node.optionals) if node.optionals.any?
+ rest = visit(node.rest)
+ posts = visit_all(node.posts) if node.posts.any?
+ keywords = visit_all(node.keywords) if node.keywords.any?
+ keyword_rest = visit(node.keyword_rest)
+ block = visit(node.block)
- on_params(requireds, nil, nil, nil, nil, nil, nil)
+ on_params(requireds, optionals, rest, posts, keywords, keyword_rest, block)
end
# ()
@@ -1323,7 +1361,8 @@ module Prism
# def foo(bar:); end
# ^^^^
def visit_required_keyword_parameter_node(node)
- raise NoMethodError, __method__
+ bounds(node.name_loc)
+ [on_label("#{node.name}:"), false]
end
# def foo(bar); end
@@ -1386,7 +1425,13 @@ module Prism
# def foo(*); end
# ^
def visit_rest_parameter_node(node)
- raise NoMethodError, __method__
+ if node.name_loc.nil?
+ bounds(node.location)
+ on_rest_param(nil)
+ else
+ bounds(node.name_loc)
+ on_rest_param(visit_token(node.name.to_s))
+ end
end
# retry