@@ -343,14 +343,23 @@ def visit_block_node(node)
343
343
when "do"
344
344
on_do_block ( params_val , on_bodystmt ( body_val , nil , nil , nil ) )
345
345
else
346
- raise raise
346
+ raise
347
347
end
348
348
end
349
349
350
350
# def foo(&bar); end
351
351
# ^^^^
352
352
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
354
363
end
355
364
356
365
# A block's parameters.
@@ -1035,7 +1044,16 @@ def visit_keyword_hash_node(node)
1035
1044
# def foo(**); end
1036
1045
# ^^
1037
1046
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
1039
1057
end
1040
1058
1041
1059
# -> {}
@@ -1118,13 +1136,19 @@ def visit_match_last_line_node(node)
1118
1136
# foo in bar
1119
1137
# ^^^^^^^^^^
1120
1138
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 )
1122
1143
end
1123
1144
1124
1145
# foo => bar
1125
1146
# ^^^^^^^^^^
1126
1147
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 )
1128
1152
end
1129
1153
1130
1154
# /(?<foo>foo)/ =~ bar
@@ -1193,13 +1217,21 @@ def visit_number_nodeed_reference_read_node(node)
1193
1217
# def foo(bar: baz); end
1194
1218
# ^^^^^^^^
1195
1219
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 ]
1197
1225
end
1198
1226
1199
1227
# def foo(bar = 1); end
1200
1228
# ^^^^^^^
1201
1229
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 ]
1203
1235
end
1204
1236
1205
1237
# a or b
@@ -1215,9 +1247,15 @@ def visit_or_node(node)
1215
1247
# def foo(bar, *baz); end
1216
1248
# ^^^^^^^^^
1217
1249
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 )
1219
1257
1220
- on_params ( requireds , nil , nil , nil , nil , nil , nil )
1258
+ on_params ( requireds , optionals , rest , posts , keywords , keyword_rest , block )
1221
1259
end
1222
1260
1223
1261
# ()
@@ -1323,7 +1361,8 @@ def visit_regular_expression_node(node)
1323
1361
# def foo(bar:); end
1324
1362
# ^^^^
1325
1363
def visit_required_keyword_parameter_node ( node )
1326
- raise NoMethodError , __method__
1364
+ bounds ( node . name_loc )
1365
+ [ on_label ( "#{ node . name } :" ) , false ]
1327
1366
end
1328
1367
1329
1368
# def foo(bar); end
@@ -1386,7 +1425,13 @@ def visit_rescue_node(node)
1386
1425
# def foo(*); end
1387
1426
# ^
1388
1427
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
1390
1435
end
1391
1436
1392
1437
# retry
0 commit comments