Skip to content

Commit 336bd72

Browse files
committed
Implement so many ripper visitor methods
1 parent b6927ac commit 336bd72

File tree

1 file changed

+56
-11
lines changed

1 file changed

+56
-11
lines changed

lib/prism/translation/ripper.rb

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,23 @@ def visit_block_node(node)
343343
when "do"
344344
on_do_block(params_val, on_bodystmt(body_val, nil, nil, nil))
345345
else
346-
raise raise
346+
raise
347347
end
348348
end
349349

350350
# def foo(&bar); end
351351
# ^^^^
352352
def visit_block_parameter_node(node)
353-
raise NoMethodError, __method__
353+
if node.name_loc.nil?
354+
bounds(node.location)
355+
on_blockarg(nil)
356+
else
357+
bounds(node.name_loc)
358+
name = visit_token(node.name.to_s)
359+
360+
bounds(node.location)
361+
on_blockarg(name)
362+
end
354363
end
355364

356365
# A block's parameters.
@@ -1035,7 +1044,16 @@ def visit_keyword_hash_node(node)
10351044
# def foo(**); end
10361045
# ^^
10371046
def visit_keyword_rest_parameter_node(node)
1038-
raise NoMethodError, __method__
1047+
if node.name_loc.nil?
1048+
bounds(node.location)
1049+
on_kwrest_param(nil)
1050+
else
1051+
bounds(node.name_loc)
1052+
name = on_ident(node.name.to_s)
1053+
1054+
bounds(node.location)
1055+
on_kwrest_param(name)
1056+
end
10391057
end
10401058

10411059
# -> {}
@@ -1118,13 +1136,19 @@ def visit_match_last_line_node(node)
11181136
# foo in bar
11191137
# ^^^^^^^^^^
11201138
def visit_match_predicate_node(node)
1121-
raise NoMethodError, __method__
1139+
value = visit(node.value)
1140+
pattern = on_in(visit(node.pattern), nil, nil)
1141+
1142+
on_case(value, pattern)
11221143
end
11231144

11241145
# foo => bar
11251146
# ^^^^^^^^^^
11261147
def visit_match_required_node(node)
1127-
raise NoMethodError, __method__
1148+
value = visit(node.value)
1149+
pattern = on_in(visit(node.pattern), nil, nil)
1150+
1151+
on_case(value, pattern)
11281152
end
11291153

11301154
# /(?<foo>foo)/ =~ bar
@@ -1193,13 +1217,21 @@ def visit_number_nodeed_reference_read_node(node)
11931217
# def foo(bar: baz); end
11941218
# ^^^^^^^^
11951219
def visit_optional_keyword_parameter_node(node)
1196-
raise NoMethodError, __method__
1220+
bounds(node.name_loc)
1221+
name = on_label("#{node.name}:")
1222+
value = visit(node.value)
1223+
1224+
[name, value]
11971225
end
11981226

11991227
# def foo(bar = 1); end
12001228
# ^^^^^^^
12011229
def visit_optional_parameter_node(node)
1202-
raise NoMethodError, __method__
1230+
bounds(node.name_loc)
1231+
name = visit_token(node.name.to_s)
1232+
value = visit(node.value)
1233+
1234+
[name, value]
12031235
end
12041236

12051237
# a or b
@@ -1215,9 +1247,15 @@ def visit_or_node(node)
12151247
# def foo(bar, *baz); end
12161248
# ^^^^^^^^^
12171249
def visit_parameters_node(node)
1218-
requireds = visit_all(node.requireds)
1250+
requireds = visit_all(node.requireds) if node.requireds.any?
1251+
optionals = visit_all(node.optionals) if node.optionals.any?
1252+
rest = visit(node.rest)
1253+
posts = visit_all(node.posts) if node.posts.any?
1254+
keywords = visit_all(node.keywords) if node.keywords.any?
1255+
keyword_rest = visit(node.keyword_rest)
1256+
block = visit(node.block)
12191257

1220-
on_params(requireds, nil, nil, nil, nil, nil, nil)
1258+
on_params(requireds, optionals, rest, posts, keywords, keyword_rest, block)
12211259
end
12221260

12231261
# ()
@@ -1323,7 +1361,8 @@ def visit_regular_expression_node(node)
13231361
# def foo(bar:); end
13241362
# ^^^^
13251363
def visit_required_keyword_parameter_node(node)
1326-
raise NoMethodError, __method__
1364+
bounds(node.name_loc)
1365+
[on_label("#{node.name}:"), false]
13271366
end
13281367

13291368
# def foo(bar); end
@@ -1386,7 +1425,13 @@ def visit_rescue_node(node)
13861425
# def foo(*); end
13871426
# ^
13881427
def visit_rest_parameter_node(node)
1389-
raise NoMethodError, __method__
1428+
if node.name_loc.nil?
1429+
bounds(node.location)
1430+
on_rest_param(nil)
1431+
else
1432+
bounds(node.name_loc)
1433+
on_rest_param(visit_token(node.name.to_s))
1434+
end
13901435
end
13911436

13921437
# retry

0 commit comments

Comments
 (0)