@@ -849,13 +849,29 @@ def visit_global_variable_operator_write_node(node)
849
849
# $foo &&= bar
850
850
# ^^^^^^^^^^^^
851
851
def visit_global_variable_and_write_node ( node )
852
- raise NoMethodError , __method__
852
+ bounds ( node . name_loc )
853
+ target = on_var_field ( on_gvar ( node . name . to_s ) )
854
+
855
+ bounds ( node . operator_loc )
856
+ operator = on_op ( "&&=" )
857
+ value = visit ( node . value )
858
+
859
+ bounds ( node . location )
860
+ on_opassign ( target , operator , value )
853
861
end
854
862
855
863
# $foo ||= bar
856
864
# ^^^^^^^^^^^^
857
865
def visit_global_variable_or_write_node ( node )
858
- raise NoMethodError , __method__
866
+ bounds ( node . name_loc )
867
+ target = on_var_field ( on_gvar ( node . name . to_s ) )
868
+
869
+ bounds ( node . operator_loc )
870
+ operator = on_op ( "||=" )
871
+ value = visit ( node . value )
872
+
873
+ bounds ( node . location )
874
+ on_opassign ( target , operator , value )
859
875
end
860
876
861
877
# $foo, = bar
@@ -939,31 +955,61 @@ def visit_index_target_node(node)
939
955
# @foo
940
956
# ^^^^
941
957
def visit_instance_variable_read_node ( node )
942
- raise NoMethodError , __method__
958
+ bounds ( node . location )
959
+ on_var_ref ( on_ivar ( node . name . to_s ) )
943
960
end
944
961
945
962
# @foo = 1
946
963
# ^^^^^^^^
947
964
def visit_instance_variable_write_node ( node )
948
- raise NoMethodError , __method__
965
+ bounds ( node . name_loc )
966
+ target = on_var_field ( on_ivar ( node . name . to_s ) )
967
+ value = visit ( node . value )
968
+
969
+ bounds ( node . location )
970
+ on_assign ( target , value )
949
971
end
950
972
951
973
# @foo += bar
952
974
# ^^^^^^^^^^^
953
975
def visit_instance_variable_operator_write_node ( node )
954
- raise NoMethodError , __method__
976
+ bounds ( node . name_loc )
977
+ target = on_var_field ( on_ivar ( node . name . to_s ) )
978
+
979
+ bounds ( node . operator_loc )
980
+ operator = on_op ( "#{ node . operator } =" )
981
+ value = visit ( node . value )
982
+
983
+ bounds ( node . location )
984
+ on_opassign ( target , operator , value )
955
985
end
956
986
957
987
# @foo &&= bar
958
988
# ^^^^^^^^^^^^
959
989
def visit_instance_variable_and_write_node ( node )
960
- raise NoMethodError , __method__
990
+ bounds ( node . name_loc )
991
+ target = on_var_field ( on_ivar ( node . name . to_s ) )
992
+
993
+ bounds ( node . operator_loc )
994
+ operator = on_op ( "&&=" )
995
+ value = visit ( node . value )
996
+
997
+ bounds ( node . location )
998
+ on_opassign ( target , operator , value )
961
999
end
962
1000
963
1001
# @foo ||= bar
964
1002
# ^^^^^^^^^^^^
965
1003
def visit_instance_variable_or_write_node ( node )
966
- raise NoMethodError , __method__
1004
+ bounds ( node . name_loc )
1005
+ target = on_var_field ( on_ivar ( node . name . to_s ) )
1006
+
1007
+ bounds ( node . operator_loc )
1008
+ operator = on_op ( "||=" )
1009
+ value = visit ( node . value )
1010
+
1011
+ bounds ( node . location )
1012
+ on_opassign ( target , operator , value )
967
1013
end
968
1014
969
1015
# @foo, = bar
@@ -1193,25 +1239,27 @@ def visit_next_node(node)
1193
1239
# nil
1194
1240
# ^^^
1195
1241
def visit_nil_node ( node )
1196
- raise NoMethodError , __method__
1242
+ bounds ( node . location )
1243
+ on_var_ref ( on_kw ( "nil" ) )
1197
1244
end
1198
1245
1199
1246
# def foo(**nil); end
1200
1247
# ^^^^^
1201
1248
def visit_no_keywords_parameter_node ( node )
1202
- raise NoMethodError , __method__
1249
+ :nil
1203
1250
end
1204
1251
1205
1252
# -> { _1 + _2 }
1206
1253
# ^^^^^^^^^^^^^^
1207
- def visit_number_nodeed_parameters_node ( node )
1254
+ def visit_numbered_parameters_node ( node )
1208
1255
raise NoMethodError , __method__
1209
1256
end
1210
1257
1211
1258
# $1
1212
1259
# ^^
1213
- def visit_number_nodeed_reference_read_node ( node )
1214
- raise NoMethodError , __method__
1260
+ def visit_numbered_reference_read_node ( node )
1261
+ bounds ( node . location )
1262
+ on_backref ( node . slice )
1215
1263
end
1216
1264
1217
1265
# def foo(bar: baz); end
@@ -1255,6 +1303,7 @@ def visit_parameters_node(node)
1255
1303
keyword_rest = visit ( node . keyword_rest )
1256
1304
block = visit ( node . block )
1257
1305
1306
+ bounds ( node . location )
1258
1307
on_params ( requireds , optionals , rest , posts , keywords , keyword_rest , block )
1259
1308
end
1260
1309
@@ -1375,7 +1424,11 @@ def visit_required_parameter_node(node)
1375
1424
# foo rescue bar
1376
1425
# ^^^^^^^^^^^^^^
1377
1426
def visit_rescue_modifier_node ( node )
1378
- raise NoMethodError , __method__
1427
+ expression = visit ( node . expression )
1428
+ rescue_expression = visit ( node . rescue_expression )
1429
+
1430
+ bounds ( node . location )
1431
+ on_rescue_mod ( expression , rescue_expression )
1379
1432
end
1380
1433
1381
1434
# begin; rescue; end
@@ -1586,7 +1639,25 @@ def visit_unless_node(node)
1586
1639
# bar until foo
1587
1640
# ^^^^^^^^^^^^^
1588
1641
def visit_until_node ( node )
1589
- raise NoMethodError , __method__
1642
+ if node . statements . nil? || ( node . keyword_loc . start_offset < node . statements . location . start_offset )
1643
+ predicate = visit ( node . predicate )
1644
+ statements =
1645
+ if node . statements . nil?
1646
+ bounds ( node . location )
1647
+ on_stmts_add ( on_stmts_new , on_void_stmt )
1648
+ else
1649
+ visit ( node . statements )
1650
+ end
1651
+
1652
+ bounds ( node . location )
1653
+ on_until ( predicate , statements )
1654
+ else
1655
+ statements = visit ( node . statements . body . first )
1656
+ predicate = visit ( node . predicate )
1657
+
1658
+ bounds ( node . location )
1659
+ on_until_mod ( predicate , statements )
1660
+ end
1590
1661
end
1591
1662
1592
1663
# case foo; when bar; end
@@ -1601,7 +1672,25 @@ def visit_when_node(node)
1601
1672
# bar while foo
1602
1673
# ^^^^^^^^^^^^^
1603
1674
def visit_while_node ( node )
1604
- raise NoMethodError , __method__
1675
+ if node . statements . nil? || ( node . keyword_loc . start_offset < node . statements . location . start_offset )
1676
+ predicate = visit ( node . predicate )
1677
+ statements =
1678
+ if node . statements . nil?
1679
+ bounds ( node . location )
1680
+ on_stmts_add ( on_stmts_new , on_void_stmt )
1681
+ else
1682
+ visit ( node . statements )
1683
+ end
1684
+
1685
+ bounds ( node . location )
1686
+ on_while ( predicate , statements )
1687
+ else
1688
+ statements = visit ( node . statements . body . first )
1689
+ predicate = visit ( node . predicate )
1690
+
1691
+ bounds ( node . location )
1692
+ on_while_mod ( predicate , statements )
1693
+ end
1605
1694
end
1606
1695
1607
1696
# `foo`
0 commit comments