ruby_parser 3.18.0 → 3.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- # ENV["VERBOSE"] = "1"
3
+ ENV["VERBOSE"] = "1"
4
4
 
5
5
  require "minitest/autorun"
6
6
  require "ruby_parser"
@@ -89,10 +89,10 @@ module TestRubyParserShared
89
89
  def test_and_multi
90
90
  rb = "true and\nnot false and\ntrue"
91
91
  pt = s(:and,
92
- s(:true).line(1),
92
+ s(:true),
93
93
  s(:and,
94
94
  s(:call, s(:false).line(2), :!).line(2),
95
- s(:true).line(3)).line(2)).line(1)
95
+ s(:true).line(3)).line(2))
96
96
 
97
97
  assert_parse rb, pt
98
98
  end
@@ -120,7 +120,7 @@ module TestRubyParserShared
120
120
  pt = s(:block,
121
121
  s(:array,
122
122
  s(:str, "a").line(2),
123
- s(:str, "b").line(3)).line(1),
123
+ s(:str, "b").line(3)),
124
124
  s(:lit, 1).line(4)).line 1
125
125
  assert_parse rb, pt
126
126
  end
@@ -170,7 +170,7 @@ module TestRubyParserShared
170
170
  pt = s(:call, nil, :x,
171
171
  s(:dxstr, "",
172
172
  s(:evstr,
173
- s(:call, nil, :y).line(1)).line(1))).line(1)
173
+ s(:call, nil, :y))))
174
174
 
175
175
  assert_parse rb, pt
176
176
  end
@@ -246,26 +246,26 @@ module TestRubyParserShared
246
246
  head = s(:args).line 1
247
247
  tail = s(:zsuper).line 2
248
248
  expected = s(:block,
249
- s(:args).line(1),
249
+ s(:args),
250
250
  s(:zsuper).line(2)).line 1
251
251
  assert_equal expected, processor.block_append(head, tail)
252
252
  end
253
253
 
254
254
  def test_block_append_begin_begin
255
- head = s(:begin, s(:args).line(1)).line 1
255
+ head = s(:begin, s(:args)).line 1
256
256
  tail = s(:begin, s(:args).line(2)).line 2
257
257
  expected = s(:block,
258
- s(:args).line(1),
258
+ s(:args),
259
259
  s(:begin,
260
260
  s(:args).line(2)).line(2)).line 1
261
261
  assert_equal expected, processor.block_append(head, tail)
262
262
  end
263
263
 
264
264
  def test_block_append_block
265
- head = s(:block, s(:args).line(1)).line(1)
265
+ head = s(:block, s(:args))
266
266
  tail = s(:zsuper).line(2)
267
267
  expected = s(:block,
268
- s(:args).line(1),
268
+ s(:args),
269
269
  s(:zsuper).line(2)).line 1
270
270
  assert_equal expected, processor.block_append(head, tail)
271
271
  end
@@ -290,7 +290,7 @@ module TestRubyParserShared
290
290
  s(:undef, s(:lit, :x)).line(2),
291
291
  s(:undef, s(:lit, :y)).line(3)).line 2
292
292
  expected = s(:block,
293
- s(:call, nil, :f1).line(1),
293
+ s(:call, nil, :f1),
294
294
  s(:block,
295
295
  s(:undef, s(:lit, :x)).line(2),
296
296
  s(:undef, s(:lit, :y)).line(3)).line(2)).line 1
@@ -370,7 +370,7 @@ module TestRubyParserShared
370
370
  rb = "$测试 = 1\n测试 = 1"
371
371
  pt = s(:block,
372
372
  s(:gasgn, :$测试, s(:lit, 1)),
373
- s(:lasgn, :测试, s(:lit, 1)))
373
+ s(:lasgn, :测试, s(:lit, 1).line(2)).line(2))
374
374
 
375
375
  assert_parse rb, pt
376
376
  end
@@ -401,7 +401,7 @@ module TestRubyParserShared
401
401
  assert_parse rb, pt
402
402
 
403
403
  rb = "true and\ntrue"
404
- pt = s(:and, s(:true), s(:true))
404
+ pt = s(:and, s(:true), s(:true).line(2))
405
405
 
406
406
  assert_parse rb, pt
407
407
  end
@@ -446,7 +446,7 @@ module TestRubyParserShared
446
446
  CODE
447
447
 
448
448
  pt = s(:defn, :f, s(:args),
449
- s(:call, nil, :g, s(:lit, 1), s(:lit, 2)))
449
+ s(:call, nil, :g, s(:lit, 1).line(2), s(:lit, 2).line(2)).line(2))
450
450
 
451
451
  assert_parse rb, pt
452
452
 
@@ -674,7 +674,7 @@ module TestRubyParserShared
674
674
  def test_class_comments
675
675
  rb = "# blah 1\n# blah 2\n\nclass X\n # blah 3\n def blah\n # blah 4\n end\nend"
676
676
  pt = s(:class, :X, nil,
677
- s(:defn, :blah, s(:args), s(:nil)))
677
+ s(:defn, :blah, s(:args).line(6), s(:nil).line(6)).line(6)).line(4)
678
678
 
679
679
  assert_parse rb, pt
680
680
 
@@ -695,12 +695,13 @@ module TestRubyParserShared
695
695
  s(:call, nil, :a),
696
696
  0,
697
697
  s(:block,
698
- s(:lasgn, :v, s(:nil)),
698
+ s(:lasgn, :v, s(:nil).line(2)).line(2),
699
699
  s(:rescue,
700
- s(:yield),
700
+ s(:yield).line(4),
701
701
  s(:resbody,
702
- s(:array, s(:const, :Exception), s(:lasgn, :v, s(:gvar, :$!))),
703
- s(:break)))))
702
+ s(:array, s(:const, :Exception).line(5),
703
+ s(:lasgn, :v, s(:gvar, :$!).line(5)).line(5)).line(5),
704
+ s(:break).line(6)).line(5)).line(4)).line(2))
704
705
 
705
706
  assert_parse rb, pt
706
707
  end
@@ -714,7 +715,7 @@ module TestRubyParserShared
714
715
 
715
716
  def test_defn_comments
716
717
  rb = "# blah 1\n# blah 2\n\ndef blah\nend"
717
- pt = s(:defn, :blah, s(:args), s(:nil))
718
+ pt = s(:defn, :blah, s(:args).line(4), s(:nil).line(4)).line(4)
718
719
 
719
720
  assert_parse rb, pt
720
721
  assert_equal "# blah 1\n# blah 2\n\n", result.comments
@@ -740,7 +741,8 @@ module TestRubyParserShared
740
741
 
741
742
  def test_defs_comments
742
743
  rb = "# blah 1\n# blah 2\n\ndef self.blah\nend"
743
- pt = s(:defs, s(:self), :blah, s(:args), s(:nil))
744
+ pt = s(:defs, s(:self).line(4), :blah, s(:args).line(4),
745
+ s(:nil).line(4)).line(4)
744
746
 
745
747
  assert_parse rb, pt
746
748
  assert_equal "# blah 1\n# blah 2\n\n", result.comments
@@ -751,8 +753,8 @@ module TestRubyParserShared
751
753
  pt = s(:block,
752
754
  s(:call, nil, :a, s(:lit, 1)),
753
755
  s(:iter,
754
- s(:call, s(:call, nil, :a), :b),
755
- s(:args, :c)))
756
+ s(:call, s(:call, nil, :a).line(2), :b).line(2),
757
+ s(:args, :c).line(2)).line(2))
756
758
 
757
759
  assert_parse rb, pt
758
760
  end
@@ -831,7 +833,7 @@ module TestRubyParserShared
831
833
  def test_eq_begin_line_numbers
832
834
  rb = "1\n=begin\ncomment\ncomment\n=end\n2"
833
835
  pt = s(:block,
834
- s(:lit, 1).line(1),
836
+ s(:lit, 1),
835
837
  s(:lit, 2).line(6))
836
838
 
837
839
  assert_parse rb, pt
@@ -839,7 +841,9 @@ module TestRubyParserShared
839
841
 
840
842
  def test_eq_begin_why_wont_people_use_their_spacebar?
841
843
  rb = "h[k]=begin\n 42\n end"
842
- pt = s(:attrasgn, s(:call, nil, :h), :[]=, s(:call, nil, :k), s(:lit, 42))
844
+ pt = s(:attrasgn,
845
+ s(:call, nil, :h), :[]=, s(:call, nil, :k),
846
+ s(:lit, 42).line(2))
843
847
 
844
848
  assert_parse rb, pt
845
849
  end
@@ -891,8 +895,8 @@ module TestRubyParserShared
891
895
  def test_heredoc_lineno
892
896
  rb = "c = <<'CCC'\nline2\nline3\nline4\nCCC\n\nd = 42"
893
897
  pt = s(:block,
894
- s(:lasgn, :c, s(:str, "line2\nline3\nline4\n").line(1)).line(1),
895
- s(:lasgn, :d, s(:lit, 42).line(7)).line(7)).line(1)
898
+ s(:lasgn, :c, s(:str, "line2\nline3\nline4\n")),
899
+ s(:lasgn, :d, s(:lit, 42).line(7)).line(7))
896
900
 
897
901
  assert_parse rb, pt
898
902
  end
@@ -900,13 +904,13 @@ module TestRubyParserShared
900
904
  def test_pctW_lineno
901
905
  rb = "%W(a\\nb\nc\ d\ne\\\nf\ng\y h\\y i\\\y)"
902
906
  pt = s(:array,
903
- s(:str, "a\nb").line(1),
907
+ s(:str, "a\nb"),
904
908
  s(:str, "c").line(2),
905
909
  s(:str, "d").line(2),
906
910
  s(:str, "e\nf").line(3),
907
911
  s(:str, "gy").line(5),
908
912
  s(:str, "hy").line(5),
909
- s(:str, "iy").line(5)).line(1)
913
+ s(:str, "iy").line(5))
910
914
 
911
915
  assert_parse rb, pt
912
916
  end
@@ -962,14 +966,17 @@ module TestRubyParserShared
962
966
 
963
967
  def test_heredoc_with_interpolation_and_carriage_return_escapes
964
968
  rb = "<<EOS\nfoo\\r\#@bar\nEOS\n"
965
- pt = s(:dstr, "foo\r", s(:evstr, s(:ivar, :@bar)), s(:str, "\n"))
969
+ pt = s(:dstr, "foo\r", s(:evstr, s(:ivar, :@bar).line(2)).line(2), s(:str, "\n").line(2))
966
970
 
967
971
  assert_parse rb, pt
968
972
  end
969
973
 
970
974
  def test_heredoc_with_interpolation_and_carriage_return_escapes_windows
971
975
  rb = "<<EOS\r\nfoo\\r\#@bar\r\nEOS\r\n"
972
- pt = s(:dstr, "foo\r", s(:evstr, s(:ivar, :@bar)), s(:str, "\n"))
976
+ pt = s(:dstr,
977
+ "foo\r",
978
+ s(:evstr, s(:ivar, :@bar).line(2)).line(2),
979
+ s(:str, "\n").line(2))
973
980
 
974
981
  assert_parse rb, pt
975
982
  end
@@ -1011,7 +1018,7 @@ module TestRubyParserShared
1011
1018
  end
1012
1019
  END
1013
1020
 
1014
- pt = s(:if, s(:true).line(1),
1021
+ pt = s(:if, s(:true),
1015
1022
  s(:block,
1016
1023
  s(:call, nil, :p, s(:lit, 1).line(2)).line(2),
1017
1024
  s(:call, s(:call, nil, :a).line(3), :b,
@@ -1031,7 +1038,7 @@ module TestRubyParserShared
1031
1038
  s(:lit, 5).line(10)).line(10),
1032
1039
  s(:call, s(:call, nil, :g).line(11), :h,
1033
1040
  s(:lit, 6).line(11), s(:lit, 7).line(11)).line(11)).line(2),
1034
- nil).line(1)
1041
+ nil)
1035
1042
 
1036
1043
  assert_parse rb, pt
1037
1044
  end
@@ -1048,14 +1055,14 @@ module TestRubyParserShared
1048
1055
  EOM
1049
1056
 
1050
1057
  pt = s(:block,
1051
- s(:if, s(:true).line(1),
1058
+ s(:if, s(:true),
1052
1059
  s(:block,
1053
1060
  s(:call, nil, :p, s(:str, "a").line(2)).line(2),
1054
1061
  s(:lasgn, :b, s(:lit, 1).line(3)).line(3),
1055
1062
  s(:call, nil, :p, s(:lvar, :b).line(4)).line(4),
1056
1063
  s(:lasgn, :c, s(:lit, 1).line(5)).line(5)).line(2),
1057
- nil).line(1),
1058
- s(:call, nil, :a).line(7)).line(1)
1064
+ nil),
1065
+ s(:call, nil, :a).line(7))
1059
1066
 
1060
1067
  assert_parse rb, pt
1061
1068
  end
@@ -1086,8 +1093,8 @@ module TestRubyParserShared
1086
1093
  pt = s(:block,
1087
1094
  s(:array,
1088
1095
  s(:str, "a").line(2),
1089
- s(:str, "b").line(3)).line(1),
1090
- s(:lit, 1).line(5)).line(1)
1096
+ s(:str, "b").line(3)),
1097
+ s(:lit, 1).line(5))
1091
1098
  assert_parse rb, pt
1092
1099
  end
1093
1100
 
@@ -1247,14 +1254,14 @@ module TestRubyParserShared
1247
1254
  def test_logical_op_12
1248
1255
  lhs = s(:lit, 1).line 1
1249
1256
  rhs = s(:lit, 2).line 2
1250
- exp = s(:and, s(:lit, 1).line(1), s(:lit, 2).line(2)).line 1
1257
+ exp = s(:and, s(:lit, 1), s(:lit, 2).line(2)).line 1
1251
1258
 
1252
1259
  assert_equal exp, processor.logical_op(:and, lhs, rhs)
1253
1260
  end
1254
1261
 
1255
1262
  def test_logical_op_1234_5
1256
1263
  lhs = s(:and,
1257
- s(:lit, 1).line(1),
1264
+ s(:lit, 1),
1258
1265
  s(:and,
1259
1266
  s(:lit, 2).line(2),
1260
1267
  s(:and,
@@ -1262,7 +1269,7 @@ module TestRubyParserShared
1262
1269
  s(:lit, 4).line(4)).line(3)).line(2)).line 1
1263
1270
  rhs = s(:lit, 5).line(5)
1264
1271
  exp = s(:and,
1265
- s(:lit, 1).line(1),
1272
+ s(:lit, 1),
1266
1273
  s(:and,
1267
1274
  s(:lit, 2).line(2),
1268
1275
  s(:and,
@@ -1276,13 +1283,13 @@ module TestRubyParserShared
1276
1283
 
1277
1284
  def test_logical_op_123_4
1278
1285
  lhs = s(:and,
1279
- s(:lit, 1).line(1),
1286
+ s(:lit, 1),
1280
1287
  s(:and,
1281
1288
  s(:lit, 2).line(2),
1282
1289
  s(:lit, 3).line(3)).line(2)).line 1
1283
1290
  rhs = s(:lit, 4).line 4
1284
1291
  exp = s(:and,
1285
- s(:lit, 1).line(1),
1292
+ s(:lit, 1),
1286
1293
  s(:and,
1287
1294
  s(:lit, 2).line(2),
1288
1295
  s(:and,
@@ -1294,11 +1301,11 @@ module TestRubyParserShared
1294
1301
 
1295
1302
  def test_logical_op_12_3
1296
1303
  lhs = s(:and,
1297
- s(:lit, 1).line(1),
1304
+ s(:lit, 1),
1298
1305
  s(:lit, 2).line(2)).line 1
1299
1306
  rhs = s(:lit, 3).line 3
1300
1307
  exp = s(:and,
1301
- s(:lit, 1).line(1),
1308
+ s(:lit, 1),
1302
1309
  s(:and,
1303
1310
  s(:lit, 2).line(2),
1304
1311
  s(:lit, 3).line(3)).line(2)).line 1
@@ -1308,15 +1315,15 @@ module TestRubyParserShared
1308
1315
 
1309
1316
  def test_logical_op_nested_mix
1310
1317
  lhs = s(:or,
1311
- s(:call, nil, :a).line(1),
1318
+ s(:call, nil, :a),
1312
1319
  s(:call, nil, :b).line(2)).line 1
1313
1320
  rhs = s(:and,
1314
1321
  s(:call, nil, :c).line(3),
1315
1322
  s(:call, nil, :d).line(4)).line 3
1316
1323
  exp = s(:or,
1317
1324
  s(:or,
1318
- s(:call, nil, :a).line(1),
1319
- s(:call, nil, :b).line(2)).line(1),
1325
+ s(:call, nil, :a),
1326
+ s(:call, nil, :b).line(2)),
1320
1327
  s(:and,
1321
1328
  s(:call, nil, :c).line(3),
1322
1329
  s(:call, nil, :d).line(4)).line(3)).line 1
@@ -1337,8 +1344,8 @@ module TestRubyParserShared
1337
1344
  # TODO: globals
1338
1345
 
1339
1346
  pt = s(:class, :"ExampleUTF8ClassNameVariet\303\240", nil,
1340
- s(:defs, s(:self), :"\303\250", s(:args),
1341
- s(:lasgn, :"cos\303\254", s(:lit, :"per\303\262"))))
1347
+ s(:defs, s(:self).line(2), :"\303\250", s(:args).line(2),
1348
+ s(:lasgn, :"cos\303\254", s(:lit, :"per\303\262").line(2)).line(2)).line(2)).line(2)
1342
1349
 
1343
1350
  err = RUBY_VERSION =~ /^1\.8/ ? "Skipping magic encoding comment\n" : ""
1344
1351
 
@@ -1349,14 +1356,14 @@ module TestRubyParserShared
1349
1356
 
1350
1357
  def test_magic_encoding_comment__bad
1351
1358
  rb = "#encoding: bunk\n0"
1352
- pt = s(:lit, 0)
1359
+ pt = s(:lit, 0).line(2)
1353
1360
 
1354
1361
  assert_parse rb, pt
1355
1362
  end
1356
1363
 
1357
1364
  def test_utf8_bom
1358
1365
  rb = "\xEF\xBB\xBF#!/usr/bin/env ruby -w\np 0\n"
1359
- pt = s(:call, nil, :p, s(:lit, 0))
1366
+ pt = s(:call, nil, :p, s(:lit, 0).line(2)).line(2)
1360
1367
 
1361
1368
  assert_parse rb, pt
1362
1369
  end
@@ -1365,12 +1372,12 @@ module TestRubyParserShared
1365
1372
  rb = "a, b::c = d"
1366
1373
  pt = s(:masgn,
1367
1374
  s(:array,
1368
- s(:lasgn, :a).line(1),
1375
+ s(:lasgn, :a),
1369
1376
  s(:attrasgn,
1370
- s(:call, nil, :b).line(1),
1371
- :c=).line(1)).line(1),
1377
+ s(:call, nil, :b),
1378
+ :c=)),
1372
1379
  s(:to_ary,
1373
- s(:call, nil, :d).line(1)).line(1)).line(1)
1380
+ s(:call, nil, :d)))
1374
1381
 
1375
1382
  assert_parse rb, pt
1376
1383
  end
@@ -1450,7 +1457,7 @@ module TestRubyParserShared
1450
1457
  def test_module_comments
1451
1458
  rb = "# blah 1\n \n # blah 2\n\nmodule X\n # blah 3\n def blah\n # blah 4\n end\nend"
1452
1459
  pt = s(:module, :X,
1453
- s(:defn, :blah, s(:args), s(:nil)))
1460
+ s(:defn, :blah, s(:args).line(7), s(:nil).line(7)).line(7)).line(5)
1454
1461
 
1455
1462
  assert_parse rb, pt
1456
1463
  assert_equal "# blah 1\n\n# blah 2\n\n", result.comments
@@ -1462,8 +1469,8 @@ module TestRubyParserShared
1462
1469
  pt = s(:block,
1463
1470
  s(:array,
1464
1471
  s(:str, "a").line(2),
1465
- s(:str, "b").line(3)).line(1),
1466
- s(:lit, 1).line(5)).line(1)
1472
+ s(:str, "b").line(3)),
1473
+ s(:lit, 1).line(5))
1467
1474
  assert_parse rb, pt
1468
1475
  end
1469
1476
 
@@ -1587,17 +1594,11 @@ module TestRubyParserShared
1587
1594
  rb = "a = 42\np a"
1588
1595
  pt = s(:block,
1589
1596
  s(:lasgn, :a, s(:lit, 42)),
1590
- s(:call, nil, :p, s(:lvar, :a)))
1597
+ s(:call, nil, :p, s(:lvar, :a).line(2)).line(2))
1591
1598
 
1592
- assert_parse_line rb, pt, 1
1593
- assert_equal 1, result.lasgn.line, "lasgn should have line number"
1594
- assert_equal 2, result.call.line, "call should have line number"
1595
-
1596
- expected = "(string)"
1597
- assert_equal expected, result.file
1598
- assert_equal expected, result.lasgn.file
1599
- assert_equal expected, result.call.file
1599
+ assert_parse rb, pt
1600
1600
 
1601
+ assert_equal "(string)", result.file
1601
1602
  assert_same result.file, result.lasgn.file
1602
1603
  assert_same result.file, result.call.file
1603
1604
  end
@@ -1605,7 +1606,7 @@ module TestRubyParserShared
1605
1606
  def test_parse_line_block_inline_comment
1606
1607
  rb = "a\nb # comment\nc"
1607
1608
  pt = s(:block,
1608
- s(:call, nil, :a).line(1),
1609
+ s(:call, nil, :a),
1609
1610
  s(:call, nil, :b).line(2),
1610
1611
  s(:call, nil, :c).line(3))
1611
1612
 
@@ -1625,23 +1626,23 @@ module TestRubyParserShared
1625
1626
  def test_parse_line_block_inline_multiline_comment
1626
1627
  rb = "a\nb # comment\n# another comment\nc"
1627
1628
  pt = s(:block,
1628
- s(:call, nil, :a).line(1),
1629
+ s(:call, nil, :a),
1629
1630
  s(:call, nil, :b).line(2),
1630
- s(:call, nil, :c).line(4)).line(1)
1631
+ s(:call, nil, :c).line(4))
1631
1632
 
1632
1633
  assert_parse rb, pt
1633
1634
  end
1634
1635
 
1635
1636
  def test_parse_line_call_ivar_arg_no_parens_line_break
1636
1637
  rb = "a @b\n"
1637
- pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1)
1638
+ pt = s(:call, nil, :a, s(:ivar, :@b))
1638
1639
 
1639
1640
  assert_parse rb, pt
1640
1641
  end
1641
1642
 
1642
1643
  def test_parse_line_call_ivar_line_break_paren
1643
1644
  rb = "a(@b\n)"
1644
- pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1)
1645
+ pt = s(:call, nil, :a, s(:ivar, :@b))
1645
1646
 
1646
1647
  assert_parse rb, pt
1647
1648
  end
@@ -1652,9 +1653,9 @@ module TestRubyParserShared
1652
1653
  pt = s(:iter,
1653
1654
  s(:call, nil, :f),
1654
1655
  s(:args, :x, :y),
1655
- s(:call, s(:lvar, :x), :+, s(:lvar, :y)))
1656
+ s(:call, s(:lvar, :x).line(2), :+, s(:lvar, :y).line(2)).line(2))
1656
1657
 
1657
- assert_parse_line rb, pt, 1
1658
+ assert_parse rb, pt
1658
1659
 
1659
1660
  _, a, b, c, = result
1660
1661
 
@@ -1665,19 +1666,19 @@ module TestRubyParserShared
1665
1666
 
1666
1667
  def test_parse_line_defn_no_parens_args
1667
1668
  rb = "def f a\nend"
1668
- pt = s(:defn, :f, s(:args, :a).line(1), s(:nil).line(1)).line(1)
1669
+ pt = s(:defn, :f, s(:args, :a), s(:nil))
1669
1670
 
1670
- assert_parse_line rb, pt, 1
1671
+ assert_parse rb, pt
1671
1672
  end
1672
1673
 
1673
1674
  def test_parse_line_defn_complex
1674
1675
  rb = "def x(y)\n p(y)\n y *= 2\n return y;\nend" # TODO: remove () & ;
1675
1676
  pt = s(:defn, :x, s(:args, :y),
1676
- s(:call, nil, :p, s(:lvar, :y)),
1677
- s(:lasgn, :y, s(:call, s(:lvar, :y), :*, s(:lit, 2))),
1678
- s(:return, s(:lvar, :y)))
1677
+ s(:call, nil, :p, s(:lvar, :y).line(2)).line(2),
1678
+ s(:lasgn, :y, s(:call, s(:lvar, :y).line(3), :*, s(:lit, 2).line(3)).line(3)).line(3),
1679
+ s(:return, s(:lvar, :y).line(4)).line(4))
1679
1680
 
1680
- assert_parse_line rb, pt, 1
1681
+ assert_parse rb, pt
1681
1682
 
1682
1683
  body = result
1683
1684
  assert_equal 2, body.call.line, "call should have line number"
@@ -1686,47 +1687,47 @@ module TestRubyParserShared
1686
1687
  end
1687
1688
 
1688
1689
  def test_parse_line_defn_no_parens
1689
- pt = s(:defn, :f, s(:args).line(1), s(:nil).line(1)).line(1)
1690
+ pt = s(:defn, :f, s(:args), s(:nil))
1690
1691
 
1691
1692
  rb = "def f\nend"
1692
- assert_parse_line rb, pt, 1
1693
+ assert_parse rb, pt
1693
1694
 
1694
1695
  processor.reset
1695
1696
 
1696
1697
  rb = "def f\n\nend"
1697
- assert_parse_line rb, pt, 1
1698
+ assert_parse rb, pt
1698
1699
  end
1699
1700
 
1700
1701
  def test_parse_line_dot2
1701
1702
  rb = "0..\n4\na..\nb\nc"
1702
1703
  pt = s(:block,
1703
- s(:lit, 0..4).line(1),
1704
+ s(:lit, 0..4),
1704
1705
  s(:dot2,
1705
1706
  s(:call, nil, :a).line(3),
1706
1707
  s(:call, nil, :b).line(4)).line(3),
1707
- s(:call, nil, :c).line(5)).line(1)
1708
+ s(:call, nil, :c).line(5))
1708
1709
 
1709
- assert_parse_line rb, pt, 1
1710
+ assert_parse rb, pt
1710
1711
  end
1711
1712
 
1712
1713
  def test_parse_line_dot3
1713
1714
  rb = "0...\n4\na...\nb\nc"
1714
1715
  pt = s(:block,
1715
- s(:lit, 0...4).line(1),
1716
+ s(:lit, 0...4),
1716
1717
  s(:dot3,
1717
1718
  s(:call, nil, :a).line(3),
1718
1719
  s(:call, nil, :b).line(4)).line(3),
1719
- s(:call, nil, :c).line(5)).line(1)
1720
+ s(:call, nil, :c).line(5))
1720
1721
 
1721
- assert_parse_line rb, pt, 1
1722
+ assert_parse rb, pt
1722
1723
  end
1723
1724
 
1724
1725
  def test_parse_line_dstr_escaped_newline
1725
1726
  rb = "\"a\\n\#{\n}\"\ntrue"
1726
1727
  pt = s(:block,
1727
1728
  s(:dstr, "a\n",
1728
- s(:evstr).line(1)).line(1),
1729
- s(:true).line(3)).line(1)
1729
+ s(:evstr)),
1730
+ s(:true).line(3))
1730
1731
 
1731
1732
  assert_parse rb, pt
1732
1733
  end
@@ -1734,8 +1735,8 @@ module TestRubyParserShared
1734
1735
  def test_parse_line_dstr_soft_newline
1735
1736
  rb = "\"a\n#\{\n}\"\ntrue"
1736
1737
  pt = s(:block,
1737
- s(:dstr, "a\n", s(:evstr).line(2)).line(1),
1738
- s(:true).line(4)).line(1)
1738
+ s(:dstr, "a\n", s(:evstr).line(2)),
1739
+ s(:true).line(4))
1739
1740
 
1740
1741
  assert_parse rb, pt
1741
1742
  end
@@ -1744,7 +1745,7 @@ module TestRubyParserShared
1744
1745
  rb = "\"a\"\\\n\"\#{b}\""
1745
1746
  pt = s(:dstr, "a",
1746
1747
  s(:evstr,
1747
- s(:call, nil, :b).line(2)).line(2)).line(1)
1748
+ s(:call, nil, :b).line(2)).line(2))
1748
1749
 
1749
1750
  assert_parse rb, pt
1750
1751
  end
@@ -1753,7 +1754,7 @@ module TestRubyParserShared
1753
1754
  rb = "{\n:s1 => 1,\n}"
1754
1755
  pt = s(:hash,
1755
1756
  s(:lit, :s1).line(2), s(:lit, 1).line(2),
1756
- ).line(1)
1757
+ )
1757
1758
 
1758
1759
  assert_parse rb, pt
1759
1760
  end
@@ -1769,12 +1770,12 @@ module TestRubyParserShared
1769
1770
  pt = s(:block,
1770
1771
  s(:lasgn, :string,
1771
1772
  s(:call,
1772
- s(:str, " very long string\n").line(1),
1773
- :strip).line(1),
1774
- ).line(1),
1773
+ s(:str, " very long string\n"),
1774
+ :strip),
1775
+ ),
1775
1776
  s(:call, nil, :puts,
1776
1777
  s(:lvar, :string).line(4)).line(4)
1777
- ).line(1)
1778
+ )
1778
1779
 
1779
1780
  assert_parse rb, pt
1780
1781
  end
@@ -1784,7 +1785,7 @@ module TestRubyParserShared
1784
1785
  pt = s(:dstr,
1785
1786
  "a\n",
1786
1787
  s(:evstr, s(:call, nil, :b).line(3)).line(3), s(:str, "\n").line(3)
1787
- ).line(1)
1788
+ )
1788
1789
 
1789
1790
  assert_parse rb, pt
1790
1791
  end
@@ -1799,8 +1800,8 @@ module TestRubyParserShared
1799
1800
 
1800
1801
  pt = s(:block,
1801
1802
  s(:lasgn, :string,
1802
- s(:str, " very long string\n").line(1)).line(1),
1803
- s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1)
1803
+ s(:str, " very long string\n")),
1804
+ s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4))
1804
1805
 
1805
1806
  assert_parse rb, pt
1806
1807
  end
@@ -1809,10 +1810,10 @@ module TestRubyParserShared
1809
1810
  rb = "f a do |x, y|\n x + y\nend"
1810
1811
 
1811
1812
  pt = s(:iter,
1812
- s(:call, nil, :f, s(:call, nil, :a).line(1)).line(1),
1813
- s(:args, :x, :y).line(1),
1813
+ s(:call, nil, :f, s(:call, nil, :a)),
1814
+ s(:args, :x, :y),
1814
1815
  s(:call, s(:lvar, :x).line(2), :+,
1815
- s(:lvar, :y).line(2)).line(2)).line(1)
1816
+ s(:lvar, :y).line(2)).line(2))
1816
1817
 
1817
1818
  assert_parse rb, pt
1818
1819
  end
@@ -1823,9 +1824,9 @@ module TestRubyParserShared
1823
1824
  pt = s(:iter,
1824
1825
  s(:call, nil, :f, s(:call, nil, :a)),
1825
1826
  s(:args, :x, :y),
1826
- s(:call, s(:lvar, :x), :+, s(:lvar, :y)))
1827
+ s(:call, s(:lvar, :x).line(2), :+, s(:lvar, :y).line(2)).line(2))
1827
1828
 
1828
- assert_parse_line rb, pt, 1
1829
+ assert_parse rb, pt
1829
1830
 
1830
1831
  _, a, b, c, = result
1831
1832
 
@@ -1837,8 +1838,8 @@ module TestRubyParserShared
1837
1838
  def test_parse_line_multiline_str
1838
1839
  rb = "\"a\nb\"\n1"
1839
1840
  pt = s(:block,
1840
- s(:str, "a\nb").line(1),
1841
- s(:lit, 1).line(3)).line(1)
1841
+ s(:str, "a\nb"),
1842
+ s(:lit, 1).line(3))
1842
1843
 
1843
1844
  assert_parse rb, pt
1844
1845
  end
@@ -1846,8 +1847,8 @@ module TestRubyParserShared
1846
1847
  def test_parse_line_multiline_str_literal_n
1847
1848
  rb = "\"a\\nb\"\n1"
1848
1849
  pt = s(:block,
1849
- s(:str, "a\nb").line(1),
1850
- s(:lit, 1).line(2)).line(1)
1850
+ s(:str, "a\nb"),
1851
+ s(:lit, 1).line(2))
1851
1852
 
1852
1853
  assert_parse rb, pt
1853
1854
  end
@@ -1856,7 +1857,7 @@ module TestRubyParserShared
1856
1857
  rb = "true\n\n"
1857
1858
  pt = s(:true)
1858
1859
 
1859
- assert_parse_line rb, pt, 1
1860
+ assert_parse rb, pt
1860
1861
  end
1861
1862
 
1862
1863
  def test_parse_line_op_asgn
@@ -1869,30 +1870,30 @@ module TestRubyParserShared
1869
1870
  pt = s(:block,
1870
1871
  s(:lasgn, :foo,
1871
1872
  s(:call,
1872
- s(:lvar, :foo).line(1),
1873
+ s(:lvar, :foo),
1873
1874
  :+,
1874
- s(:call, nil, :bar).line(2)).line(1)).line(1),
1875
- s(:call, nil, :baz).line(3)).line(1)
1875
+ s(:call, nil, :bar).line(2))),
1876
+ s(:call, nil, :baz).line(3))
1876
1877
 
1877
- assert_parse_line rb, pt, 1
1878
+ assert_parse rb, pt
1878
1879
  end
1879
1880
 
1880
1881
  def test_parse_line_postexe
1881
1882
  rb = "END {\nfoo\n}"
1882
1883
  pt = s(:iter,
1883
- s(:postexe).line(1), 0,
1884
- s(:call, nil, :foo).line(2)).line(1)
1884
+ s(:postexe), 0,
1885
+ s(:call, nil, :foo).line(2))
1885
1886
 
1886
- assert_parse_line rb, pt, 1
1887
+ assert_parse rb, pt
1887
1888
  end
1888
1889
 
1889
1890
  def test_parse_line_preexe
1890
1891
  rb = "BEGIN {\nfoo\n}"
1891
1892
  pt = s(:iter,
1892
- s(:preexe).line(1), 0,
1893
- s(:call, nil, :foo).line(2)).line(1)
1893
+ s(:preexe), 0,
1894
+ s(:call, nil, :foo).line(2))
1894
1895
 
1895
- assert_parse_line rb, pt, 1
1896
+ assert_parse rb, pt
1896
1897
  end
1897
1898
 
1898
1899
  def test_parse_line_rescue
@@ -1904,7 +1905,7 @@ module TestRubyParserShared
1904
1905
  s(:resbody, s(:array).line(5),
1905
1906
  s(:call, nil, :c).line(6)).line(5)).line(2)
1906
1907
 
1907
- assert_parse_line rb, pt, 2
1908
+ assert_parse rb, pt
1908
1909
  end
1909
1910
 
1910
1911
  def test_parse_line_return
@@ -1917,11 +1918,11 @@ module TestRubyParserShared
1917
1918
  RUBY
1918
1919
 
1919
1920
  pt = s(:defn, :blah, s(:args),
1920
- s(:if, s(:true),
1921
- s(:return, s(:lit, 42)),
1922
- nil))
1921
+ s(:if, s(:true).line(2),
1922
+ s(:return, s(:lit, 42).line(3)).line(3),
1923
+ nil).line(2))
1923
1924
 
1924
- assert_parse_line rb, pt, 1
1925
+ assert_parse rb, pt
1925
1926
 
1926
1927
  assert_equal 3, result.if.return.line
1927
1928
  assert_equal 3, result.if.return.lit.line
@@ -1930,8 +1931,8 @@ module TestRubyParserShared
1930
1931
  def test_parse_line_str_with_newline_escape
1931
1932
  rb = 'a("\n", true)'
1932
1933
  pt = s(:call, nil, :a,
1933
- s(:str, "\n").line(1),
1934
- s(:true).line(1))
1934
+ s(:str, "\n"),
1935
+ s(:true))
1935
1936
 
1936
1937
  assert_parse rb, pt
1937
1938
  end
@@ -1940,18 +1941,18 @@ module TestRubyParserShared
1940
1941
  rb = "a,\nb = c\nd"
1941
1942
  pt = s(:block,
1942
1943
  s(:masgn,
1943
- s(:array, s(:lasgn, :a).line(1), s(:lasgn, :b).line(2)).line(1),
1944
- s(:to_ary, s(:call, nil, :c).line(2)).line(2)).line(1),
1945
- s(:call, nil, :d).line(3)).line(1)
1944
+ s(:array, s(:lasgn, :a), s(:lasgn, :b).line(2)),
1945
+ s(:to_ary, s(:call, nil, :c).line(2)).line(2)),
1946
+ s(:call, nil, :d).line(3))
1946
1947
 
1947
- assert_parse_line rb, pt, 1
1948
+ assert_parse rb, pt
1948
1949
  end
1949
1950
 
1950
1951
  def test_parse_line_trailing_newlines
1951
1952
  rb = "a \nb"
1952
1953
  pt = s(:block,
1953
- s(:call, nil, :a).line(1),
1954
- s(:call, nil, :b).line(2)).line(1)
1954
+ s(:call, nil, :a),
1955
+ s(:call, nil, :b).line(2))
1955
1956
 
1956
1957
  assert_parse rb, pt
1957
1958
  end
@@ -2063,7 +2064,9 @@ module TestRubyParserShared
2063
2064
 
2064
2065
  def test_str_heredoc_interp
2065
2066
  rb = "<<\"\"\n\#{x}\nblah2\n\n"
2066
- pt = s(:dstr, "", s(:evstr, s(:call, nil, :x)), s(:str, "\nblah2\n"))
2067
+ pt = s(:dstr, "",
2068
+ s(:evstr, s(:call, nil, :x).line(2)).line(2),
2069
+ s(:str, "\nblah2\n").line(2))
2067
2070
 
2068
2071
  assert_parse rb, pt
2069
2072
  end
@@ -2086,7 +2089,7 @@ module TestRubyParserShared
2086
2089
 
2087
2090
  def test_str_newline_hash_line_number
2088
2091
  rb = "\"\\n\\n\\n\\n#\"\n1"
2089
- pt = s(:block, s(:str, "\n\n\n\n#").line(1),
2092
+ pt = s(:block, s(:str, "\n\n\n\n#"),
2090
2093
  s(:lit, 1).line(2))
2091
2094
 
2092
2095
  assert_parse rb, pt
@@ -2117,8 +2120,8 @@ module TestRubyParserShared
2117
2120
  def test_str_single_newline
2118
2121
  rp = "a '\n';b"
2119
2122
  pt = s(:block,
2120
- s(:call, nil, :a, s(:str, "\n").line(1)).line(1),
2121
- s(:call, nil, :b).line(2)).line(1)
2123
+ s(:call, nil, :a, s(:str, "\n")),
2124
+ s(:call, nil, :b).line(2))
2122
2125
 
2123
2126
  assert_parse rp, pt
2124
2127
  end
@@ -2126,8 +2129,8 @@ module TestRubyParserShared
2126
2129
  def test_str_single_escaped_newline
2127
2130
  rp = "a '\\n';b"
2128
2131
  pt = s(:block,
2129
- s(:call, nil, :a, s(:str, "\\n").line(1)).line(1),
2130
- s(:call, nil, :b).line(1)).line(1)
2132
+ s(:call, nil, :a, s(:str, "\\n")),
2133
+ s(:call, nil, :b))
2131
2134
 
2132
2135
  assert_parse rp, pt
2133
2136
  end
@@ -2135,8 +2138,8 @@ module TestRubyParserShared
2135
2138
  def test_str_single_double_escaped_newline
2136
2139
  rp = "a '\\\\n';b"
2137
2140
  pt = s(:block,
2138
- s(:call, nil, :a, s(:str, "\\n").line(1)).line(1),
2139
- s(:call, nil, :b).line(1)).line(1)
2141
+ s(:call, nil, :a, s(:str, "\\n")),
2142
+ s(:call, nil, :b))
2140
2143
 
2141
2144
  assert_parse rp, pt
2142
2145
  end
@@ -2144,8 +2147,8 @@ module TestRubyParserShared
2144
2147
  def test_str_double_newline
2145
2148
  rp = "a \"\n\";b"
2146
2149
  pt = s(:block,
2147
- s(:call, nil, :a, s(:str, "\n").line(1)).line(1),
2148
- s(:call, nil, :b).line(2)).line(1)
2150
+ s(:call, nil, :a, s(:str, "\n")),
2151
+ s(:call, nil, :b).line(2))
2149
2152
 
2150
2153
  assert_parse rp, pt
2151
2154
  end
@@ -2153,8 +2156,8 @@ module TestRubyParserShared
2153
2156
  def test_str_double_escaped_newline
2154
2157
  rp = "a \"\\n\";b"
2155
2158
  pt = s(:block,
2156
- s(:call, nil, :a, s(:str, "\n").line(1)).line(1),
2157
- s(:call, nil, :b).line(1)).line(1)
2159
+ s(:call, nil, :a, s(:str, "\n")),
2160
+ s(:call, nil, :b))
2158
2161
 
2159
2162
  assert_parse rp, pt
2160
2163
  end
@@ -2162,8 +2165,8 @@ module TestRubyParserShared
2162
2165
  def test_str_double_double_escaped_newline
2163
2166
  rp = "a \"\\\\n\";b"
2164
2167
  pt = s(:block,
2165
- s(:call, nil, :a, s(:str, "\\n").line(1)).line(1),
2166
- s(:call, nil, :b).line(1)).line(1)
2168
+ s(:call, nil, :a, s(:str, "\\n")),
2169
+ s(:call, nil, :b))
2167
2170
 
2168
2171
  assert_parse rp, pt
2169
2172
  end
@@ -2555,7 +2558,7 @@ module TestRubyParserShared19Plus
2555
2558
  nil,
2556
2559
  :private,
2557
2560
  s(:defn, :f, s(:args),
2558
- s(:iter, s(:call, s(:call, nil, :a), :b), 0)))
2561
+ s(:iter, s(:call, s(:call, nil, :a).line(2), :b).line(2), 0).line(2)))
2559
2562
 
2560
2563
  assert_parse rb, pt
2561
2564
  end
@@ -2633,7 +2636,10 @@ module TestRubyParserShared19Plus
2633
2636
 
2634
2637
  def test_call_assoc_new_if_multiline
2635
2638
  rb = "a(b: if :c\n1\nelse\n2\nend)"
2636
- pt = s(:call, nil, :a, s(:hash, s(:lit, :b), s(:if, s(:lit, :c), s(:lit, 1), s(:lit, 2))))
2639
+ pt = s(:call, nil, :a,
2640
+ s(:hash,
2641
+ s(:lit, :b),
2642
+ s(:if, s(:lit, :c), s(:lit, 1).line(2), s(:lit, 2).line(4))))
2637
2643
 
2638
2644
  assert_parse rb, pt
2639
2645
  end
@@ -2722,8 +2728,8 @@ module TestRubyParserShared19Plus
2722
2728
  def test_defn_opt_last_arg
2723
2729
  rb = "def m arg = false\nend"
2724
2730
  pt = s(:defn, :m,
2725
- s(:args, s(:lasgn, :arg, s(:false).line(1)).line(1)).line(1),
2726
- s(:nil).line(1)).line(1)
2731
+ s(:args, s(:lasgn, :arg, s(:false))),
2732
+ s(:nil))
2727
2733
 
2728
2734
  assert_parse rb, pt
2729
2735
  end
@@ -2780,7 +2786,7 @@ module TestRubyParserShared19Plus
2780
2786
  rb = "1 ? b('') : 2\na d: 3"
2781
2787
  pt = s(:block,
2782
2788
  s(:if, s(:lit, 1), s(:call, nil, :b, s(:str, "")), s(:lit, 2)),
2783
- s(:call, nil, :a, s(:hash, s(:lit, :d), s(:lit, 3))))
2789
+ s(:call, nil, :a, s(:hash, s(:lit, :d).line(2), s(:lit, 3).line(2)).line(2)).line(2))
2784
2790
 
2785
2791
  assert_parse rb, pt
2786
2792
  end
@@ -3181,9 +3187,9 @@ module TestRubyParserShared19Plus
3181
3187
  rb = "a\n.b\n#.c\n.d"
3182
3188
  pt = s(:call,
3183
3189
  s(:call,
3184
- s(:call, nil, :a).line(1),
3185
- :b).line(1),
3186
- :d).line(1) # TODO: fix linenos: 1, 2, 4
3190
+ s(:call, nil, :a),
3191
+ :b),
3192
+ :d) # TODO: fix linenos: 1, 2, 4
3187
3193
 
3188
3194
  assert_parse rb, pt
3189
3195
  end
@@ -3204,8 +3210,8 @@ module TestRubyParserShared19Plus
3204
3210
 
3205
3211
  def test_motherfuckin_leading_dots2
3206
3212
  rb = "1\n..3"
3207
- pt = s(:block, s(:lit, 1).line(1),
3208
- s(:dot2, nil, s(:lit, 3).line(2)).line(2)).line(1)
3213
+ pt = s(:block, s(:lit, 1),
3214
+ s(:dot2, nil, s(:lit, 3).line(2)).line(2))
3209
3215
 
3210
3216
  if processor.class.version >= 27
3211
3217
  assert_parse rb, pt
@@ -3219,6 +3225,8 @@ module TestRubyParserShared19Plus
3219
3225
 
3220
3226
  assert_parse "f(state: {})", pt
3221
3227
  assert_parse "f(state: {\n})", pt
3228
+
3229
+ pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash).line(2)))
3222
3230
  assert_parse "f(state:\n {\n})", pt
3223
3231
  end
3224
3232
 
@@ -3281,7 +3289,7 @@ module TestRubyParserShared19Plus
3281
3289
  rb = "until not var.nil?\n 'foo'\nend"
3282
3290
  pt = s(:until,
3283
3291
  s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"),
3284
- s(:str, "foo"), true)
3292
+ s(:str, "foo").line(2), true)
3285
3293
 
3286
3294
  assert_parse rb, pt
3287
3295
  end
@@ -3290,7 +3298,7 @@ module TestRubyParserShared19Plus
3290
3298
  rb = "until not var.nil?\n 'foo'\nend"
3291
3299
  pt = s(:until,
3292
3300
  s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"),
3293
- s(:str, "foo"), true)
3301
+ s(:str, "foo").line(2), true)
3294
3302
 
3295
3303
  processor.canonicalize_conditions = false
3296
3304
 
@@ -3301,7 +3309,7 @@ module TestRubyParserShared19Plus
3301
3309
  rb = "while not var.nil?\n 'foo'\nend"
3302
3310
  pt = s(:while,
3303
3311
  s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"),
3304
- s(:str, "foo"), true)
3312
+ s(:str, "foo").line(2), true)
3305
3313
 
3306
3314
  assert_parse rb, pt
3307
3315
  end
@@ -3310,7 +3318,7 @@ module TestRubyParserShared19Plus
3310
3318
  rb = "while not var.nil?\n 'foo'\nend"
3311
3319
  pt = s(:while,
3312
3320
  s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"),
3313
- s(:str, "foo"), true)
3321
+ s(:str, "foo").line(2), true)
3314
3322
 
3315
3323
  processor.canonicalize_conditions = false
3316
3324
 
@@ -3474,14 +3482,16 @@ module TestRubyParserShared19Plus
3474
3482
  RUBY
3475
3483
 
3476
3484
  pt = s(:hash,
3477
- s(:lit, :a),
3485
+ s(:lit, :a).line(2),
3478
3486
  s(:iter,
3479
- s(:call, nil, :lambda),
3487
+ s(:call, nil, :lambda).line(2),
3480
3488
  0,
3481
- s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))),
3489
+ s(:if, s(:call, nil, :b).line(2),
3490
+ s(:call, nil, :c).line(2),
3491
+ s(:call, nil, :d).line(2)).line(2)).line(2),
3482
3492
 
3483
- s(:lit, :e),
3484
- s(:nil))
3493
+ s(:lit, :e).line(3),
3494
+ s(:nil).line(3))
3485
3495
 
3486
3496
  assert_parse rb, pt
3487
3497
  end
@@ -3531,6 +3541,8 @@ module TestRubyParserShared20Plus
3531
3541
  end
3532
3542
 
3533
3543
  def test_regexp_esc_C_slash
3544
+ skip "https://bugs.ruby-lang.org/issues/18449" if RUBY_VERSION == "3.1.0"
3545
+
3534
3546
  rb = "/\\cC\\d/"
3535
3547
  pt = s(:lit, /\cC\d/)
3536
3548
 
@@ -3543,15 +3555,15 @@ module TestRubyParserShared20Plus
3543
3555
  s(:call,
3544
3556
  s(:call, s(:str, " a\n"), :+,
3545
3557
  s(:str, "b\n c")),
3546
- :+, s(:str, "d")))
3558
+ :+, s(:str, "d").line(4)))
3547
3559
 
3548
3560
  assert_parse rb, pt
3549
3561
  end
3550
3562
 
3551
3563
  def test_heredoc_nested
3552
3564
  rb = "[<<A,\n\#{<<B}\nb\nB\na\nA\n0]"
3553
- pt = s(:array, s(:str, "b\n\na\n").line(1),
3554
- s(:lit, 0).line(7)).line(1)
3565
+ pt = s(:array, s(:str, "b\n\na\n"),
3566
+ s(:lit, 0).line(7))
3555
3567
 
3556
3568
  assert_parse rb, pt
3557
3569
  end
@@ -3562,8 +3574,8 @@ module TestRubyParserShared20Plus
3562
3574
  s(:str, "1"),
3563
3575
  s(:str, "2\n"),
3564
3576
  s(:str, "3"),
3565
- s(:str, "4"),
3566
- s(:str, "5"))
3577
+ s(:str, "4").line(4),
3578
+ s(:str, "5").line(4))
3567
3579
 
3568
3580
  assert_parse rb, pt
3569
3581
  end
@@ -3668,7 +3680,7 @@ module TestRubyParserShared20Plus
3668
3680
  rb = "a (b)\nc.d do end"
3669
3681
  pt = s(:block,
3670
3682
  s(:call, nil, :a, s(:call, nil, :b)),
3671
- s(:iter, s(:call, s(:call, nil, :c), :d), 0))
3683
+ s(:iter, s(:call, s(:call, nil, :c).line(2), :d).line(2), 0).line(2))
3672
3684
 
3673
3685
 
3674
3686
  assert_parse rb, pt
@@ -3678,8 +3690,9 @@ module TestRubyParserShared20Plus
3678
3690
  rb = "a def b(c)\n d\n end\n e.f do end"
3679
3691
  pt = s(:block,
3680
3692
  s(:call, nil, :a,
3681
- s(:defn, :b, s(:args, :c), s(:call, nil, :d))),
3682
- s(:iter, s(:call, s(:call, nil, :e), :f), 0))
3693
+ s(:defn, :b, s(:args, :c),
3694
+ s(:call, nil, :d).line(2))),
3695
+ s(:iter, s(:call, s(:call, nil, :e).line(4), :f).line(4), 0).line(4))
3683
3696
 
3684
3697
  assert_parse rb, pt
3685
3698
  end
@@ -3697,7 +3710,9 @@ module TestRubyParserShared20Plus
3697
3710
  def test_call_begin_call_block_call
3698
3711
  rb = "a begin\nb.c do end\nend"
3699
3712
  pt = s(:call, nil, :a,
3700
- s(:iter, s(:call, s(:call, nil, :b), :c), 0))
3713
+ s(:iter,
3714
+ s(:call, s(:call, nil, :b).line(2), :c).line(2),
3715
+ 0).line(2))
3701
3716
 
3702
3717
  assert_parse rb, pt
3703
3718
  end
@@ -3708,7 +3723,7 @@ module TestRubyParserShared20Plus
3708
3723
  s(:op_asgn, s(:const, :B),
3709
3724
  s(:call, nil, :d, s(:call, nil, :e)),
3710
3725
  :C,
3711
- :*)).line(1)
3726
+ :*))
3712
3727
 
3713
3728
  assert_parse rb, pt
3714
3729
  end
@@ -3766,9 +3781,9 @@ module TestRubyParserShared20Plus
3766
3781
  s(:iter,
3767
3782
  s(:call, s(:const, :Class), :new),
3768
3783
  0,
3769
- s(:defn, :initialize, s(:args), s(:nil))),
3784
+ s(:defn, :initialize, s(:args).line(2), s(:nil).line(2)).line(2)),
3770
3785
  :new),
3771
- s(:hash, s(:lit, :at), s(:str, "endpoint")))
3786
+ s(:hash, s(:lit, :at).line(4), s(:str, "endpoint").line(4)).line(4))
3772
3787
 
3773
3788
  assert_parse rb, pt
3774
3789
  end
@@ -3875,8 +3890,8 @@ module TestRubyParserShared20Plus
3875
3890
  pt = s(:block,
3876
3891
  s(:array,
3877
3892
  s(:lit, :a).line(2),
3878
- s(:lit, :b).line(3)).line(1),
3879
- s(:lit, 1).line(5)).line(1)
3893
+ s(:lit, :b).line(3)),
3894
+ s(:lit, 1).line(5))
3880
3895
  assert_parse rb, pt
3881
3896
  end
3882
3897
 
@@ -3913,7 +3928,7 @@ module TestRubyParserShared20Plus
3913
3928
  pt = s(:block,
3914
3929
  s(:array,
3915
3930
  s(:lit, :a).line(2),
3916
- s(:lit, :b).line(3)).line(1),
3931
+ s(:lit, :b).line(3)),
3917
3932
  s(:lit, 1).line(5))
3918
3933
  assert_parse rb, pt
3919
3934
  end
@@ -3955,7 +3970,7 @@ module TestRubyParserShared20Plus
3955
3970
  s(:iter,
3956
3971
  s(:lambda),
3957
3972
  s(:args),
3958
- s(:iter, s(:call, s(:call, nil, :a), :b), 0)))
3973
+ s(:iter, s(:call, s(:call, nil, :a).line(2), :b).line(2), 0).line(2)))
3959
3974
 
3960
3975
  assert_parse rb, pt
3961
3976
  end
@@ -3968,7 +3983,7 @@ module TestRubyParserShared20Plus
3968
3983
  s(:args),
3969
3984
  s(:iter,
3970
3985
  s(:call, nil, :a,
3971
- s(:lit, 1)), 0)))
3986
+ s(:lit, 1).line(2)).line(2), 0).line(2)))
3972
3987
 
3973
3988
  assert_parse rb, pt
3974
3989
  end
@@ -4075,8 +4090,8 @@ module TestRubyParserShared21Plus
4075
4090
  CODE
4076
4091
 
4077
4092
  pt = s(:block,
4078
- s(:str, "\n\n\n\n\n\n\n\n\n\n").line(1),
4079
- s(:class, :Foo, nil).line(5)).line(1)
4093
+ s(:str, "\n\n\n\n\n\n\n\n\n\n"),
4094
+ s(:class, :Foo, nil).line(5))
4080
4095
 
4081
4096
  assert_parse rb, pt
4082
4097
  end
@@ -4205,8 +4220,8 @@ module TestRubyParserShared23Plus
4205
4220
  def test_heredoc_squiggly_interp
4206
4221
  rb = "a = <<~EOF\n w\n x#\{42} y\n z\n EOF"
4207
4222
  pt = s(:lasgn, :a, s(:dstr, " w\nx",
4208
- s(:evstr, s(:lit, 42)),
4209
- s(:str, " y\n z\n")))
4223
+ s(:evstr, s(:lit, 42).line(3)).line(3),
4224
+ s(:str, " y\n z\n").line(3)))
4210
4225
 
4211
4226
  assert_parse rb, pt
4212
4227
  end
@@ -4324,7 +4339,7 @@ module TestRubyParserShared23Plus
4324
4339
 
4325
4340
  def test_safe_call_operator
4326
4341
  rb = "a&.> 1"
4327
- pt = s(:safe_call, s(:call, nil, :a), :>, s(:lit, 1)).line(1)
4342
+ pt = s(:safe_call, s(:call, nil, :a), :>, s(:lit, 1))
4328
4343
 
4329
4344
  assert_parse rb, pt
4330
4345
  end
@@ -4345,14 +4360,15 @@ module TestRubyParserShared23Plus
4345
4360
 
4346
4361
  def test_safe_op_asgn
4347
4362
  rb = "a&.b += x 1"
4348
- pt = s(:safe_op_asgn, s(:call, nil, :a), s(:call, nil, :x, s(:lit, 1)), :b, :+).line(1)
4363
+ pt = s(:safe_op_asgn, s(:call, nil, :a), s(:call, nil, :x, s(:lit, 1)), :b, :+)
4349
4364
 
4350
4365
  assert_parse rb, pt
4351
4366
  end
4352
4367
 
4353
4368
  def test_safe_op_asgn2
4354
4369
  rb = "a&.b ||=\nx;"
4355
- pt = s(:safe_op_asgn2, s(:call, nil, :a), :b=, :"||", s(:call, nil, :x)).line(1)
4370
+ pt = s(:safe_op_asgn2,
4371
+ s(:call, nil, :a), :b=, :"||", s(:call, nil, :x).line(2))
4356
4372
 
4357
4373
  assert_parse rb, pt
4358
4374
  end
@@ -4367,11 +4383,11 @@ a + b
4367
4383
  )
4368
4384
 
4369
4385
  pt = s(:block,
4370
- s(:call, nil, :puts, s(:str, "hello my dear friend").line(1)).line(1),
4386
+ s(:call, nil, :puts, s(:str, "hello my dear friend")),
4371
4387
  s(:call, s(:call, nil, :a).line(6),
4372
4388
  :+,
4373
4389
  s(:call, nil, :b).line(6)).line(6)
4374
- ).line(1)
4390
+ )
4375
4391
 
4376
4392
  assert_parse rb, pt
4377
4393
  end
@@ -4429,8 +4445,8 @@ module TestRubyParserShared26Plus
4429
4445
  def test_symbol_list
4430
4446
  rb = '%I[#{a} #{b}]'
4431
4447
  pt = s(:array,
4432
- s(:dsym, "", s(:evstr, s(:call, nil, :a)).line(1)).line(1),
4433
- s(:dsym, "", s(:evstr, s(:call, nil, :b)).line(1)).line(1)).line 1
4448
+ s(:dsym, "", s(:evstr, s(:call, nil, :a))),
4449
+ s(:dsym, "", s(:evstr, s(:call, nil, :b)))).line 1
4434
4450
 
4435
4451
  assert_parse rb, pt
4436
4452
  end
@@ -4451,9 +4467,9 @@ module TestPatternMatching
4451
4467
  puts rb
4452
4468
  end
4453
4469
 
4454
- pt = s(:case, s(:lit, :a).line(1),
4470
+ pt = s(:case, s(:lit, :a),
4455
4471
  s(:in, exp_pt, nil).line(2),
4456
- nil).line(1)
4472
+ nil)
4457
4473
 
4458
4474
  assert_parse rb, pt
4459
4475
  end
@@ -4507,11 +4523,11 @@ module TestPatternMatching
4507
4523
 
4508
4524
  def test_case_in_31?
4509
4525
  rb = "case :a\nin [:b, *c]\n :d\nend"
4510
- pt = s(:case, s(:lit, :a).line(1),
4526
+ pt = s(:case, s(:lit, :a),
4511
4527
  s(:in,
4512
4528
  s(:array_pat, nil, s(:lit, :b).line(2), :"*c").line(2),
4513
4529
  s(:lit, :d).line(3)).line(2),
4514
- nil).line(1)
4530
+ nil)
4515
4531
 
4516
4532
  assert_parse rb, pt
4517
4533
  end
@@ -4550,7 +4566,7 @@ module TestPatternMatching
4550
4566
 
4551
4567
  def test_case_in_37
4552
4568
  rb = "case :a\nin { b: [Hash, *] }\n :c\nend"
4553
- pt = s(:case, s(:lit, :a).line(1),
4569
+ pt = s(:case, s(:lit, :a),
4554
4570
  s(:in,
4555
4571
  s(:hash_pat,
4556
4572
  nil,
@@ -4558,14 +4574,14 @@ module TestPatternMatching
4558
4574
  s(:array_pat, nil, s(:const, :Hash).line(2), :"*").line(2)
4559
4575
  ).line(2),
4560
4576
  s(:lit, :c).line(3)).line(2),
4561
- nil).line(1)
4577
+ nil)
4562
4578
 
4563
4579
  assert_parse rb, pt
4564
4580
  end
4565
4581
 
4566
4582
  def test_case_in_42
4567
4583
  rb = "case :a\nin :b, *_ then nil\nend"
4568
- pt = s(:case, s(:lit, :a).line(1),
4584
+ pt = s(:case, s(:lit, :a),
4569
4585
  s(:in,
4570
4586
  s(:array_pat,
4571
4587
  nil,
@@ -4573,20 +4589,20 @@ module TestPatternMatching
4573
4589
  :"*_",
4574
4590
  ).line(2),
4575
4591
  s(:nil).line(2)).line(2),
4576
- nil).line(1)
4592
+ nil)
4577
4593
 
4578
4594
  assert_parse rb, pt
4579
4595
  end
4580
4596
 
4581
4597
  def test_case_in_42_2
4582
4598
  rb = "case :a\nin A(*list) then nil\nend"
4583
- pt = s(:case, s(:lit, :a).line(1),
4599
+ pt = s(:case, s(:lit, :a),
4584
4600
  s(:in,
4585
4601
  s(:array_pat,
4586
4602
  s(:const, :A).line(2),
4587
4603
  :"*list").line(2),
4588
4604
  s(:nil).line(2)).line(2),
4589
- nil).line(1)
4605
+ nil)
4590
4606
 
4591
4607
  assert_parse rb, pt
4592
4608
  end
@@ -4601,12 +4617,12 @@ module TestPatternMatching
4601
4617
 
4602
4618
  def test_case_in_47
4603
4619
  rb = "case :a\nin [*, :b, :c]\n :d\nend"
4604
- pt = s(:case, s(:lit, :a).line(1),
4620
+ pt = s(:case, s(:lit, :a),
4605
4621
  s(:in,
4606
4622
  s(:array_pat, nil, :*,
4607
4623
  s(:lit, :b).line(2), s(:lit, :c).line(2)).line(2),
4608
4624
  s(:lit, :d).line(3)).line(2),
4609
- nil).line(1)
4625
+ nil)
4610
4626
 
4611
4627
  assert_parse rb, pt
4612
4628
  end
@@ -4614,10 +4630,10 @@ module TestPatternMatching
4614
4630
  def test_case_in_67
4615
4631
  rb = "case :a\nin 1.. then nil\nend"
4616
4632
  pt = s(:case,
4617
- s(:lit, :a).line(1),
4633
+ s(:lit, :a),
4618
4634
  s(:in, s(:dot2, s(:lit, 1).line(2), nil).line(2),
4619
4635
  s(:nil).line(2)).line(2),
4620
- nil).line(1)
4636
+ nil)
4621
4637
 
4622
4638
  assert_parse rb, pt
4623
4639
  end
@@ -4674,14 +4690,14 @@ module TestPatternMatching
4674
4690
  def test_case_in_86
4675
4691
  rb = "case [:a, :b]\nin ::NilClass, * then nil\nend"
4676
4692
  pt = s(:case,
4677
- s(:array, s(:lit, :a).line(1), s(:lit, :b).line(1)).line(1),
4693
+ s(:array, s(:lit, :a), s(:lit, :b)),
4678
4694
  s(:in,
4679
4695
  s(:array_pat,
4680
4696
  nil,
4681
4697
  s(:colon3, :NilClass).line(2),
4682
4698
  :*).line(2),
4683
4699
  s(:nil).line(2)).line(2),
4684
- nil).line(1)
4700
+ nil)
4685
4701
 
4686
4702
  assert_parse rb, pt
4687
4703
  end
@@ -4689,60 +4705,60 @@ module TestPatternMatching
4689
4705
  def test_case_in_86_2
4690
4706
  rb = "case [:a, :b]\nin *, ::NilClass then nil\nend"
4691
4707
  pt = s(:case,
4692
- s(:array, s(:lit, :a).line(1), s(:lit, :b).line(1)).line(1),
4708
+ s(:array, s(:lit, :a), s(:lit, :b)),
4693
4709
  s(:in,
4694
4710
  s(:array_pat,
4695
4711
  nil,
4696
4712
  :*,
4697
4713
  s(:colon3, :NilClass).line(2)).line(2),
4698
4714
  s(:nil).line(2)).line(2),
4699
- nil).line(1)
4715
+ nil)
4700
4716
 
4701
4717
  assert_parse rb, pt
4702
4718
  end
4703
4719
 
4704
4720
  def test_case_in_array_pat_const
4705
4721
  rb = "case :a\nin B[c]\n :d\nend"
4706
- pt = s(:case, s(:lit, :a).line(1),
4722
+ pt = s(:case, s(:lit, :a),
4707
4723
  s(:in,
4708
4724
  s(:array_pat,
4709
4725
  s(:const, :B).line(2),
4710
4726
  s(:lvar, :c).line(2)).line(2),
4711
4727
  s(:lit, :d).line(3)).line(2),
4712
- nil).line(1)
4728
+ nil)
4713
4729
 
4714
4730
  assert_parse rb, pt
4715
4731
  end
4716
4732
 
4717
4733
  def test_case_in_array_pat_const2
4718
4734
  rb = "case :a\nin B::C[d]\n :e\nend"
4719
- pt = s(:case, s(:lit, :a).line(1),
4735
+ pt = s(:case, s(:lit, :a),
4720
4736
  s(:in,
4721
4737
  s(:array_pat,
4722
4738
  s(:const, s(:colon2, s(:const, :B).line(2), :C).line(2)).line(2),
4723
4739
  s(:lvar, :d).line(2)).line(2),
4724
4740
  s(:lit, :e).line(3)).line(2),
4725
- nil).line(1)
4741
+ nil)
4726
4742
 
4727
4743
  assert_parse rb, pt
4728
4744
  end
4729
4745
 
4730
4746
  def test_case_in_array_pat_paren_assign
4731
4747
  rb = "case :a\nin B(C => d)\n :d\nend"
4732
- pt = s(:case, s(:lit, :a).line(1),
4748
+ pt = s(:case, s(:lit, :a),
4733
4749
  s(:in,
4734
4750
  s(:array_pat,
4735
4751
  s(:const, :B).line(2),
4736
4752
  s(:lasgn, :d, s(:const, :C).line(2)).line(2)).line(2),
4737
4753
  s(:lit, :d).line(3)).line(2),
4738
- nil).line(1)
4754
+ nil)
4739
4755
 
4740
4756
  assert_parse rb, pt
4741
4757
  end
4742
4758
 
4743
4759
  def test_case_in_const
4744
4760
  rb = "case Array\nin Class\n :b\nend"
4745
- pt = s(:case, s(:const, :Array).line(1),
4761
+ pt = s(:case, s(:const, :Array),
4746
4762
  s(:in, s(:const, :Class).line(2),
4747
4763
  s(:lit, :b).line(3)).line(2),
4748
4764
  nil).line 1
@@ -4752,7 +4768,7 @@ module TestPatternMatching
4752
4768
 
4753
4769
  def test_case_in_else
4754
4770
  rb = "case Array\nin Class\n :b\nelse\n :c\nend\n"
4755
- pt = s(:case, s(:const, :Array).line(1),
4771
+ pt = s(:case, s(:const, :Array),
4756
4772
  s(:in, s(:const, :Class).line(2),
4757
4773
  s(:lit, :b).line(3)).line(2),
4758
4774
  s(:lit, :c).line(5)).line 1
@@ -4762,7 +4778,7 @@ module TestPatternMatching
4762
4778
 
4763
4779
  def test_case_in_hash_pat
4764
4780
  rb = "case :a\nin { b: 'c', d: \"e\" } then\n :f\nend\n"
4765
- pt = s(:case, s(:lit, :a).line(1),
4781
+ pt = s(:case, s(:lit, :a),
4766
4782
  s(:in,
4767
4783
  s(:hash_pat,
4768
4784
  nil,
@@ -4770,14 +4786,14 @@ module TestPatternMatching
4770
4786
  s(:lit, :d).line(2), s(:str, "e").line(2)).line(2),
4771
4787
  s(:lit, :f).line(3)
4772
4788
  ).line(2),
4773
- nil).line(1)
4789
+ nil)
4774
4790
 
4775
4791
  assert_parse rb, pt
4776
4792
  end
4777
4793
 
4778
4794
  def test_case_in_hash_pat_assign
4779
4795
  rb = "case :a\nin { b: Integer => x, d: \"e\", f: } then\n :g\nend"
4780
- pt = s(:case, s(:lit, :a).line(1),
4796
+ pt = s(:case, s(:lit, :a),
4781
4797
  s(:in,
4782
4798
  s(:hash_pat,
4783
4799
  nil,
@@ -4786,33 +4802,33 @@ module TestPatternMatching
4786
4802
  s(:lit, :d).line(2), s(:str, "e").line(2),
4787
4803
  s(:lit, :f).line(2), nil).line(2),
4788
4804
  s(:lit, :g).line(3)).line(2),
4789
- nil).line(1)
4805
+ nil)
4790
4806
 
4791
4807
  assert_parse rb, pt
4792
4808
  end
4793
4809
 
4794
4810
  def test_case_in_hash_pat_paren_assign
4795
4811
  rb = "case :a\nin B(a: 42)\n :d\nend"
4796
- pt = s(:case, s(:lit, :a).line(1),
4812
+ pt = s(:case, s(:lit, :a),
4797
4813
  s(:in,
4798
4814
  s(:hash_pat,
4799
4815
  s(:const, :B).line(2),
4800
4816
  s(:lit, :a).line(2), s(:lit, 42).line(2)).line(2),
4801
4817
  s(:lit, :d).line(3)).line(2),
4802
- nil).line(1)
4818
+ nil)
4803
4819
 
4804
4820
  assert_parse rb, pt
4805
4821
  end
4806
4822
 
4807
4823
  def test_case_in_hash_pat_paren_true
4808
4824
  rb = "case :a\nin b: true then\n :c\nend\n"
4809
- pt = s(:case, s(:lit, :a).line(1),
4825
+ pt = s(:case, s(:lit, :a),
4810
4826
  s(:in,
4811
4827
  s(:hash_pat,
4812
4828
  nil,
4813
4829
  s(:lit, :b).line(2), s(:true).line(2)).line(2),
4814
4830
  s(:lit, :c).line(3)).line(2),
4815
- nil).line(1)
4831
+ nil)
4816
4832
 
4817
4833
  assert_parse rb, pt
4818
4834
  end
@@ -4820,7 +4836,7 @@ module TestPatternMatching
4820
4836
  def test_case_in_hash_pat_rest
4821
4837
  rb = "case :a\nin b: c, **rest then :d\nend"
4822
4838
  pt = s(:case,
4823
- s(:lit, :a).line(1),
4839
+ s(:lit, :a),
4824
4840
  s(:in,
4825
4841
  s(:hash_pat,
4826
4842
  nil,
@@ -4828,7 +4844,7 @@ module TestPatternMatching
4828
4844
  s(:lvar, :c).line(2),
4829
4845
  s(:kwrest, :"**rest").line(2)).line(2),
4830
4846
  s(:lit, :d).line(2)).line(2),
4831
- nil).line(1)
4847
+ nil)
4832
4848
 
4833
4849
  assert_parse rb, pt
4834
4850
  end
@@ -4836,13 +4852,13 @@ module TestPatternMatching
4836
4852
  def test_case_in_hash_pat_rest_solo
4837
4853
  rb = "case :a\nin **rest then :d\nend"
4838
4854
  pt = s(:case,
4839
- s(:lit, :a).line(1),
4855
+ s(:lit, :a),
4840
4856
  s(:in,
4841
4857
  s(:hash_pat,
4842
4858
  nil,
4843
4859
  s(:kwrest, :"**rest").line(2)).line(2),
4844
4860
  s(:lit, :d).line(2)).line(2),
4845
- nil).line(1)
4861
+ nil)
4846
4862
 
4847
4863
  assert_parse rb, pt
4848
4864
  end
@@ -4850,14 +4866,14 @@ module TestPatternMatching
4850
4866
  def test_case_in_if_unless_post_mod
4851
4867
  rb = "case :a\nin A if true\n :C\nin D unless false\n :E\nend"
4852
4868
  pt = s(:case,
4853
- s(:lit, :a).line(1),
4869
+ s(:lit, :a),
4854
4870
  s(:in,
4855
4871
  s(:if, s(:true).line(2), s(:const, :A).line(2), nil).line(2),
4856
4872
  s(:lit, :C).line(3)).line(2),
4857
4873
  s(:in,
4858
4874
  s(:if, s(:false).line(4), nil, s(:const, :D).line(4)).line(4),
4859
4875
  s(:lit, :E).line(5)).line(4),
4860
- nil).line(1)
4876
+ nil)
4861
4877
 
4862
4878
  assert_parse rb, pt
4863
4879
  end
@@ -4865,37 +4881,37 @@ module TestPatternMatching
4865
4881
  def test_case_in_multiple
4866
4882
  rb = "case :a\nin A::B\n :C\nin D::E\n :F\nend"
4867
4883
  pt = s(:case,
4868
- s(:lit, :a).line(1),
4884
+ s(:lit, :a),
4869
4885
  s(:in,
4870
4886
  s(:const, s(:colon2, s(:const, :A).line(2), :B).line(2)).line(2),
4871
4887
  s(:lit, :C).line(3)).line(2),
4872
4888
  s(:in,
4873
4889
  s(:const, s(:colon2, s(:const, :D).line(4), :E).line(4)).line(4),
4874
4890
  s(:lit, :F).line(5)).line(4),
4875
- nil).line(1)
4891
+ nil)
4876
4892
 
4877
4893
  assert_parse rb, pt
4878
4894
  end
4879
4895
 
4880
4896
  def test_case_in_or
4881
4897
  rb = "case :a\nin B | C\n :d\nend\n"
4882
- pt = s(:case, s(:lit, :a).line(1),
4898
+ pt = s(:case, s(:lit, :a),
4883
4899
  s(:in,
4884
4900
  s(:or,
4885
4901
  s(:const, :B).line(2),
4886
4902
  s(:const, :C).line(2)).line(2),
4887
4903
  s(:lit, :d).line(3)).line(2),
4888
- nil).line(1)
4904
+ nil)
4889
4905
 
4890
4906
  assert_parse rb, pt
4891
4907
  end
4892
4908
 
4893
4909
  def test_in_expr_no_case
4894
4910
  rb = "'woot' in String"
4895
- pt = s(:case, s(:str, "woot").line(1),
4896
- s(:in, s(:const, :String).line(1),
4897
- nil).line(1),
4898
- nil).line(1)
4911
+ pt = s(:case, s(:str, "woot"),
4912
+ s(:in, s(:const, :String),
4913
+ nil),
4914
+ nil)
4899
4915
 
4900
4916
  assert_parse rb, pt
4901
4917
  end
@@ -4909,10 +4925,10 @@ module TestPatternMatching
4909
4925
  RUBY
4910
4926
 
4911
4927
  pt = s(:case,
4912
- s(:lit, 0).line(1),
4928
+ s(:lit, 0),
4913
4929
  s(:in, s(:dot2, s(:lit, -1).line(2), s(:lit, 1).line(2)).line(2),
4914
4930
  s(:true).line(3)).line(2),
4915
- nil).line(1)
4931
+ nil)
4916
4932
 
4917
4933
  assert_parse rb, pt
4918
4934
  end
@@ -4925,10 +4941,10 @@ module TestPatternMatching
4925
4941
  end
4926
4942
  RUBY
4927
4943
  pt = s(:case,
4928
- s(:call, nil, :obj).line(1),
4944
+ s(:call, nil, :obj),
4929
4945
  s(:in, s(:array_pat, s(:const, :Object).line(2)).line(2),
4930
4946
  s(:true).line(3)).line(2),
4931
- nil).line(1)
4947
+ nil)
4932
4948
 
4933
4949
  assert_parse rb, pt
4934
4950
  end
@@ -4942,9 +4958,9 @@ module TestPatternMatching
4942
4958
  RUBY
4943
4959
  pt = s(:case,
4944
4960
  s(:array,
4945
- s(:lit, 0).line(1),
4946
- s(:lit, 1).line(1),
4947
- s(:lit, 2).line(1)).line(1),
4961
+ s(:lit, 0),
4962
+ s(:lit, 1),
4963
+ s(:lit, 2)),
4948
4964
  s(:in,
4949
4965
  s(:array_pat,
4950
4966
  nil,
@@ -4952,7 +4968,7 @@ module TestPatternMatching
4952
4968
  s(:lit, 1).line(2),
4953
4969
  :*).line(666),
4954
4970
  s(:true).line(3)).line(2),
4955
- nil).line(1)
4971
+ nil)
4956
4972
 
4957
4973
  assert_parse rb, pt
4958
4974
  end
@@ -4966,15 +4982,15 @@ module TestPatternMatching
4966
4982
  RUBY
4967
4983
  pt = s(:case,
4968
4984
  s(:hash,
4969
- s(:lit, :a).line(1),
4970
- s(:lit, 0).line(1)).line(1),
4985
+ s(:lit, :a),
4986
+ s(:lit, 0)),
4971
4987
  s(:in,
4972
4988
  s(:hash_pat, nil, s(:lit, :a).line(2), nil,
4973
4989
  s(:kwrest, :"**rest").line(2)).line(2),
4974
4990
  s(:array,
4975
4991
  s(:lvar, :a).line(3),
4976
4992
  s(:lvar, :rest).line(3)).line(3)).line(2),
4977
- nil).line(1)
4993
+ nil)
4978
4994
 
4979
4995
  assert_parse rb, pt
4980
4996
  end
@@ -4988,14 +5004,14 @@ module TestPatternMatching
4988
5004
  RUBY
4989
5005
  pt = s(:case,
4990
5006
  s(:hash,
4991
- s(:lit, :a).line(1),
4992
- s(:lit, 0).line(1)).line(1),
5007
+ s(:lit, :a),
5008
+ s(:lit, 0)),
4993
5009
  s(:in,
4994
5010
  s(:hash_pat, nil, s(:lit, :a).line(2), nil,
4995
5011
  s(:kwrest, :"**").line(2)).line(2),
4996
5012
  s(:array,
4997
5013
  s(:lvar, :a).line(3)).line(3)).line(2),
4998
- nil).line(1)
5014
+ nil)
4999
5015
 
5000
5016
  assert_parse rb, pt
5001
5017
  end
@@ -5008,12 +5024,12 @@ module TestPatternMatching
5008
5024
  end
5009
5025
  RUBY
5010
5026
  pt = s(:case,
5011
- s(:lit, :a).line(1),
5027
+ s(:lit, :a),
5012
5028
  s(:in,
5013
5029
  s(:hash_pat, s(:const, :Object).line(2),
5014
5030
  s(:lit, :b).line(2), s(:lit, 1).line(2)).line(2),
5015
5031
  s(:lit, 1).line(3)).line(2),
5016
- nil).line(1)
5032
+ nil)
5017
5033
 
5018
5034
 
5019
5035
  assert_parse rb, pt
@@ -5027,24 +5043,24 @@ module TestPatternMatching
5027
5043
  end
5028
5044
  RUBY
5029
5045
  pt = s(:case,
5030
- s(:hash, s(:lit, :a).line(1), s(:lit, 1).line(1)).line(1),
5046
+ s(:hash, s(:lit, :a), s(:lit, 1)),
5031
5047
  s(:in,
5032
5048
  s(:hash_pat, nil,
5033
5049
  s(:lit, :a).line(2), s(:lit, 1).line(2),
5034
5050
  s(:kwrest, :"**nil").line(2)).line(2),
5035
5051
  s(:true).line(3)).line(2),
5036
- nil).line(1)
5052
+ nil)
5037
5053
 
5038
5054
  assert_parse rb, pt
5039
5055
  end
5040
5056
 
5041
5057
  # def test_case_in_TEMPLATE
5042
5058
  # rb = "case :a\nin XXX then\n YYY\nend\n"
5043
- # pt = s(:case, s(:lit, :a).line(1),
5059
+ # pt = s(:case, s(:lit, :a),
5044
5060
  # s(:in,
5045
5061
  # ZZZ,
5046
5062
  # WWW).line(2),
5047
- # nil).line(1)
5063
+ # nil)
5048
5064
  #
5049
5065
  # assert_parse rb, pt
5050
5066
  # end
@@ -5089,7 +5105,7 @@ module TestRubyParserShared27Plus
5089
5105
  s(:call, nil, :f),
5090
5106
  s(:args, :"**nil"))
5091
5107
 
5092
- assert_parse_line rb, pt, 1
5108
+ assert_parse rb, pt
5093
5109
  end
5094
5110
 
5095
5111
  def test_defn_forward_args
@@ -5097,7 +5113,7 @@ module TestRubyParserShared27Plus
5097
5113
  pt = s(:defn, :a, s(:args, s(:forward_args)),
5098
5114
  s(:call, nil, :b, s(:forward_args)))
5099
5115
 
5100
- assert_parse_line rb, pt, 1
5116
+ assert_parse rb, pt
5101
5117
  end
5102
5118
 
5103
5119
  def test_defn_arg_forward_args
@@ -5105,7 +5121,7 @@ module TestRubyParserShared27Plus
5105
5121
  pt = s(:defn, :a, s(:args, :x, s(:forward_args)),
5106
5122
  s(:call, nil, :b, s(:lvar, :x), s(:forward_args)))
5107
5123
 
5108
- assert_parse_line rb, pt, 1
5124
+ assert_parse rb, pt
5109
5125
  end
5110
5126
 
5111
5127
  def test_defn_args_forward_args
@@ -5114,7 +5130,7 @@ module TestRubyParserShared27Plus
5114
5130
  s(:call, nil, :b, s(:lit, :get), s(:lvar, :z),
5115
5131
  s(:forward_args)))
5116
5132
 
5117
- assert_parse_line rb, pt, 1
5133
+ assert_parse rb, pt
5118
5134
  end
5119
5135
 
5120
5136
  def test_defn_no_kwargs
@@ -5132,10 +5148,10 @@ module TestRubyParserShared27Plus
5132
5148
  # z arg: 42 # $!: wrong number of arguments (given 1, expected 0) (ArgumentError)
5133
5149
 
5134
5150
  rb = "def x(**nil); end"
5135
- pt = s(:defn, :x, s(:args, :"**nil").line(1),
5136
- s(:nil).line(1)).line(1)
5151
+ pt = s(:defn, :x, s(:args, :"**nil"),
5152
+ s(:nil))
5137
5153
 
5138
- assert_parse_line rb, pt, 1
5154
+ assert_parse rb, pt
5139
5155
  end
5140
5156
 
5141
5157
  def test_call_forward_args_outside_method_definition
@@ -5179,8 +5195,8 @@ module TestRubyParserShared30Plus
5179
5195
  def test_rhs_asgn
5180
5196
  rb = "42 => n"
5181
5197
  pt = s(:case,
5182
- s(:lit, 42).line(1),
5183
- s(:in, s(:lvar, :n).line(1), nil).line(1), nil).line(1)
5198
+ s(:lit, 42),
5199
+ s(:in, s(:lvar, :n), nil), nil)
5184
5200
 
5185
5201
  assert_parse rb, pt
5186
5202
  end
@@ -5188,14 +5204,14 @@ module TestRubyParserShared30Plus
5188
5204
  def test_case_in_find
5189
5205
  rb = "case :a\n in *a, :+, *b\nend"
5190
5206
  pt = s(:case,
5191
- s(:lit, :a).line(1),
5207
+ s(:lit, :a),
5192
5208
  s(:in,
5193
5209
  s(:find_pat, nil,
5194
5210
  :"*a",
5195
5211
  s(:array_pat, s(:lit, :+).line(2)).line(2),
5196
5212
  :"*b").line(2),
5197
5213
  nil).line(2),
5198
- nil).line(1)
5214
+ nil)
5199
5215
 
5200
5216
  assert_parse rb, pt
5201
5217
  end
@@ -5203,22 +5219,38 @@ module TestRubyParserShared30Plus
5203
5219
  def test_case_in_find_array
5204
5220
  rb = "case :a\nin [*, :b, c, *]\nend"
5205
5221
  pt = s(:case,
5206
- s(:lit, :a).line(1),
5222
+ s(:lit, :a),
5207
5223
  s(:in,
5208
5224
  s(:find_pat, nil,
5209
5225
  :*,
5210
5226
  s(:array_pat, s(:lit, :b).line(2), s(:lvar, :c).line(2)).line(2),
5211
5227
  :*).line(2),
5212
5228
  nil).line(2),
5213
- nil).line(1)
5229
+ nil)
5214
5230
 
5215
5231
  assert_parse rb, pt
5216
5232
  end
5217
5233
 
5218
5234
  def test_defn_oneliner
5219
5235
  rb = "def exec(cmd) = system(cmd)"
5220
- pt = s(:defn, :exec, s(:args, :cmd).line(1),
5221
- s(:call, nil, :system, s(:lvar, :cmd).line(1)).line(1)).line(1)
5236
+ pt = s(:defn, :exec, s(:args, :cmd),
5237
+ s(:call, nil, :system, s(:lvar, :cmd)))
5238
+
5239
+ assert_parse rb, pt
5240
+ end
5241
+
5242
+ def test_defn_oneliner_noargs_parentheses
5243
+ rb = "def exec() = system"
5244
+ pt = s(:defn, :exec, s(:args),
5245
+ s(:call, nil, :system))
5246
+
5247
+ assert_parse rb, pt
5248
+ end
5249
+
5250
+ def test_defn_oneliner_noargs
5251
+ rb = "def exec = system"
5252
+ pt = s(:defn, :exec, s(:args),
5253
+ s(:call, nil, :system))
5222
5254
 
5223
5255
  assert_parse rb, pt
5224
5256
  end
@@ -5227,24 +5259,32 @@ module TestRubyParserShared30Plus
5227
5259
  rb = "def exec(cmd)\n system(cmd)\nrescue\n nil\nend\n"
5228
5260
  pt = s(:defn, :exec, s(:args, :cmd),
5229
5261
  s(:rescue,
5230
- s(:call, nil, :system, s(:lvar, :cmd)),
5231
- s(:resbody, s(:array), s(:nil))))
5262
+ s(:call, nil, :system, s(:lvar, :cmd).line(2)).line(2),
5263
+ s(:resbody, s(:array).line(3),
5264
+ s(:nil).line(4)).line(3)).line(2))
5265
+
5232
5266
  assert_parse rb, pt
5233
5267
 
5234
5268
  rb = "def exec(cmd)\n system(cmd) rescue nil\nend\n"
5235
- assert_parse rb, pt
5269
+ assert_parse rb, pt.deep_each { |s| s.line = 2 if s.line && s.line > 1 }
5236
5270
 
5237
5271
  rb = "def exec(cmd) = system(cmd) rescue nil"
5238
- assert_parse rb, pt
5272
+ assert_parse rb, pt.deep_each { |s| s.line = 1 }
5273
+ end
5274
+
5275
+ def test_defn_oneliner_comment
5276
+ p = RubyParser.new
5277
+ rb = "# blah\ndef exec(cmd) = system(cmd)"
5278
+ sexp = p.parse rb
5279
+
5280
+ assert_equal :defn, sexp.sexp_type
5281
+ assert_equal "# blah\n", sexp.comments
5239
5282
  end
5240
5283
 
5241
5284
  def test_defs_oneliner
5242
5285
  rb = "def self.exec(cmd) = system(cmd)"
5243
- pt = s(:defs,
5244
- s(:self).line(1),
5245
- :exec,
5246
- s(:args, :cmd).line(1),
5247
- s(:call, nil, :system, s(:lvar, :cmd).line(1)).line(1)).line(1)
5286
+ pt = s(:defs, s(:self), :exec, s(:args, :cmd),
5287
+ s(:call, nil, :system, s(:lvar, :cmd)))
5248
5288
 
5249
5289
  assert_parse rb, pt
5250
5290
  end
@@ -5253,28 +5293,169 @@ module TestRubyParserShared30Plus
5253
5293
  rb = "def self.exec(cmd)\n system(cmd)\nrescue\n nil\nend\n"
5254
5294
  pt = s(:defs, s(:self), :exec, s(:args, :cmd),
5255
5295
  s(:rescue,
5256
- s(:call, nil, :system, s(:lvar, :cmd)),
5257
- s(:resbody, s(:array), s(:nil))))
5296
+ s(:call, nil, :system, s(:lvar, :cmd).line(2)).line(2),
5297
+ s(:resbody, s(:array).line(3), s(:nil).line(4)).line(3)).line(2))
5258
5298
  assert_parse rb, pt
5259
5299
 
5260
5300
  rb = "def self.exec(cmd)\n system(cmd) rescue nil\nend\n"
5261
- assert_parse rb, pt
5301
+ assert_parse rb, pt.deep_each { |s| s.line = 2 if s.line && s.line > 1 }
5262
5302
 
5263
5303
  rb = "def self.exec(cmd) = system(cmd) rescue nil"
5264
- assert_parse rb, pt
5304
+ assert_parse rb, pt.deep_each { |s| s.line = 1 }
5305
+ end
5306
+
5307
+ def test_defs_oneliner_comment
5308
+ p = RubyParser.new
5309
+ rb = "# blah\ndef self.exec(cmd) = system(cmd)"
5310
+ sexp = p.parse rb
5311
+
5312
+ assert_equal :defs, sexp.sexp_type
5313
+ assert_equal "# blah\n", sexp.comments
5265
5314
  end
5266
5315
 
5267
5316
  def test_defn_oneliner_setter
5268
5317
  rb = "class X\n def x=(o) = 42\nend"
5269
5318
 
5270
5319
  assert_syntax_error rb, /setter method cannot be defined/
5320
+
5321
+ rb = "class X\n def []=(k, v) = 42\nend"
5322
+
5323
+ assert_syntax_error rb, /setter method cannot be defined/
5271
5324
  end
5272
5325
 
5273
5326
  def test_defs_oneliner_setter
5274
- rb = "class X\n def self.x= = 42\nend"
5327
+ rb = "class X\n def self.x=(o) = 42\nend"
5328
+
5329
+ assert_syntax_error rb, /setter method cannot be defined/
5330
+
5331
+ rb = "class X\n def self.[]=(k, v) = 42\nend"
5275
5332
 
5276
5333
  assert_syntax_error rb, /setter method cannot be defined/
5277
5334
  end
5335
+
5336
+ def test_defn_oneliner_eq2
5337
+ rb = "class X\n def ==(o) = 42\nend"
5338
+ pt = s(:class, :X, nil,
5339
+ s(:defn, :==, s(:args, :o).line(2),
5340
+ s(:lit, 42).line(2)).line(2)
5341
+ ).line(1)
5342
+
5343
+ assert_parse rb, pt
5344
+ end
5345
+
5346
+ def test_defs_oneliner_eq2
5347
+ rb = "class X\n def self.==(o) = 42\nend"
5348
+ pt = s(:class, :X, nil,
5349
+ s(:defs, s(:self).line(2), :==, s(:args, :o).line(2),
5350
+ s(:lit, 42).line(2)).line(2)
5351
+ ).line(1)
5352
+
5353
+ assert_parse rb, pt
5354
+ end
5355
+ end
5356
+
5357
+ module TestRubyParserShared31Plus
5358
+ include TestRubyParserShared30Plus
5359
+
5360
+ def test_assoc__bare
5361
+ rb = "{ y: }"
5362
+ pt = s(:hash, s(:lit, :y), nil)
5363
+
5364
+ assert_parse rb, pt
5365
+ end
5366
+
5367
+ def test_block_arg__bare
5368
+ rb = "def x(&); end"
5369
+ pt = s(:defn, :x, s(:args, :&).line(1),
5370
+ s(:nil).line(1)).line(1)
5371
+
5372
+ assert_parse rb, pt
5373
+ end
5374
+
5375
+ def test_case_in_carat_parens
5376
+ processor.env[:a] = :lvar
5377
+
5378
+ rb = "[^(a)]"
5379
+ pt = s(:array_pat, nil,
5380
+ s(:lvar, :a).line(2)).line(2)
5381
+
5382
+ assert_case_in rb, pt
5383
+ end
5384
+
5385
+ def test_case_in_carat_nonlocal_vars
5386
+ processor.env[:a] = :lvar
5387
+
5388
+ rb = "[^@a, ^$b, ^@@c]"
5389
+ pt = s(:array_pat,
5390
+ nil,
5391
+ s(:ivar, :@a).line(2),
5392
+ s(:gvar, :$b).line(2),
5393
+ s(:cvar, :@@c).line(2)).line(2)
5394
+
5395
+ assert_case_in rb, pt
5396
+ end
5397
+
5398
+ def test_case_in_quoted_label
5399
+ rb = " \"b\": "
5400
+ pt = s(:hash_pat, nil, s(:lit, :b).line(2), nil).line(2)
5401
+
5402
+ assert_case_in rb, pt
5403
+ end
5404
+
5405
+ def test_call_block_arg_named
5406
+ processor.env[:blk] = :lvar
5407
+ rb = "x(&blk)"
5408
+ pt = s(:call, nil, :x,
5409
+ s(:block_pass, s(:lvar, :blk).line(1)).line(1)).line(1)
5410
+
5411
+ assert_parse rb, pt
5412
+ end
5413
+
5414
+ def test_call_block_arg_unnamed
5415
+ rb = "x(&)"
5416
+ pt = s(:call, nil, :x,
5417
+ s(:block_pass).line(1)).line(1)
5418
+
5419
+ assert_parse rb, pt
5420
+ end
5421
+
5422
+ def test_defn_endless_command
5423
+ rb = "def some_method = other_method 42"
5424
+ pt = s(:defn, :some_method, s(:args).line(1),
5425
+ s(:call, nil, :other_method, s(:lit, 42).line(1)).line(1)).line(1)
5426
+
5427
+ assert_parse rb, pt
5428
+ end
5429
+
5430
+ def test_defn_endless_command_rescue
5431
+ rb = "def some_method = other_method 42 rescue 24"
5432
+ pt = s(:defn, :some_method, s(:args).line(1),
5433
+ s(:rescue,
5434
+ s(:call, nil, :other_method, s(:lit, 42).line(1)).line(1),
5435
+ s(:resbody, s(:array).line(1),
5436
+ s(:lit, 24).line(1)).line(1)).line(1)).line(1)
5437
+
5438
+ assert_parse rb, pt
5439
+ end
5440
+
5441
+ def test_defs_endless_command
5442
+ rb = "def x.some_method = other_method 42"
5443
+ pt = s(:defs, s(:call, nil, :x).line(1), :some_method, s(:args).line(1),
5444
+ s(:call, nil, :other_method, s(:lit, 42).line(1)).line(1)).line(1)
5445
+
5446
+ assert_parse rb, pt
5447
+ end
5448
+
5449
+ def test_defs_endless_command_rescue
5450
+ rb = "def x.some_method = other_method 42 rescue 24"
5451
+ pt = s(:defs, s(:call, nil, :x).line(1), :some_method, s(:args).line(1),
5452
+ s(:rescue,
5453
+ s(:call, nil, :other_method, s(:lit, 42).line(1)).line(1),
5454
+ s(:resbody, s(:array).line(1),
5455
+ s(:lit, 24).line(1)).line(1)).line(1)).line(1)
5456
+
5457
+ assert_parse rb, pt
5458
+ end
5278
5459
  end
5279
5460
 
5280
5461
  class Minitest::Test
@@ -5341,13 +5522,16 @@ class RubyParserTestCase < ParseTreeTestCase
5341
5522
  super
5342
5523
  end
5343
5524
 
5525
+ attr_accessor :assert_parse_ran
5526
+
5344
5527
  def assert_parse rb, pt
5528
+ self.processor.reset if assert_parse_ran # allows multiple calls
5529
+ self.assert_parse_ran = true
5530
+
5345
5531
  timeout = (ENV["RP_TIMEOUT"] || 10).to_i
5346
5532
 
5347
- if ENV["RP_LINES"] then # TODO: make default once tests cleaned up
5348
- pt.deep_each { |s| s.line ||= 1 }
5349
- pt.line ||= 1
5350
- end
5533
+ pt.deep_each { |s| s.line ||= 1 }
5534
+ pt.line ||= 1
5351
5535
 
5352
5536
  self.result = processor.parse rb, "(string)", timeout
5353
5537
  assert_equal pt, result
@@ -5368,16 +5552,6 @@ class RubyParserTestCase < ParseTreeTestCase
5368
5552
  end
5369
5553
  end
5370
5554
 
5371
- def assert_parse_line rb, pt, line
5372
- old_env = ENV["VERBOSE"]
5373
- ENV["VERBOSE"] = "1"
5374
-
5375
- assert_parse rb, pt
5376
- assert_equal line, result.line, "call should have line number"
5377
- ensure
5378
- ENV["VERBOSE"] = old_env
5379
- end
5380
-
5381
5555
  def assert_syntax_error rb, emsg, klass = RubyParser::SyntaxError
5382
5556
  e = nil
5383
5557
  assert_silent do
@@ -5483,11 +5657,10 @@ class TestRubyParserV25 < RubyParserTestCase
5483
5657
  rb = "proc do\n :begin\nensure\n :ensure\nend.call"
5484
5658
  pt = s(:call,
5485
5659
  s(:iter,
5486
- s(:call, nil, :proc),
5487
- 0,
5660
+ s(:call, nil, :proc), 0,
5488
5661
  s(:ensure,
5489
- s(:lit, :begin),
5490
- s(:lit, :ensure))),
5662
+ s(:lit, :begin).line(2),
5663
+ s(:lit, :ensure).line(4)).line(2)),
5491
5664
  :call)
5492
5665
 
5493
5666
  assert_parse rb, pt
@@ -5496,16 +5669,14 @@ class TestRubyParserV25 < RubyParserTestCase
5496
5669
  def test_rescue_do_end_no_raise
5497
5670
  rb = "tap do\n :begin\nrescue\n :rescue\nelse\n :else\nensure\n :ensure\nend"
5498
5671
  pt = s(:iter,
5499
- s(:call, nil, :tap),
5500
- 0,
5672
+ s(:call, nil, :tap), 0,
5501
5673
  s(:ensure,
5502
5674
  s(:rescue,
5503
- s(:lit, :begin),
5504
- s(:resbody,
5505
- s(:array),
5506
- s(:lit, :rescue)),
5507
- s(:lit, :else)),
5508
- s(:lit, :ensure)))
5675
+ s(:lit, :begin).line(2),
5676
+ s(:resbody, s(:array).line(3),
5677
+ s(:lit, :rescue).line(4)).line(3),
5678
+ s(:lit, :else).line(6)).line(2),
5679
+ s(:lit, :ensure).line(8)).line(2))
5509
5680
 
5510
5681
  assert_parse rb, pt
5511
5682
  end
@@ -5513,11 +5684,10 @@ class TestRubyParserV25 < RubyParserTestCase
5513
5684
  def test_rescue_do_end_raised
5514
5685
  rb = "tap do\n raise\nensure\n :ensure\nend"
5515
5686
  pt = s(:iter,
5516
- s(:call, nil, :tap),
5517
- 0,
5687
+ s(:call, nil, :tap), 0,
5518
5688
  s(:ensure,
5519
- s(:call, nil, :raise),
5520
- s(:lit, :ensure)))
5689
+ s(:call, nil, :raise).line(2),
5690
+ s(:lit, :ensure).line(4)).line(2))
5521
5691
 
5522
5692
  assert_parse rb, pt
5523
5693
  end
@@ -5529,12 +5699,12 @@ class TestRubyParserV25 < RubyParserTestCase
5529
5699
  0,
5530
5700
  s(:ensure,
5531
5701
  s(:rescue,
5532
- s(:call, nil, :raise),
5702
+ s(:call, nil, :raise).line(2),
5533
5703
  s(:resbody,
5534
- s(:array),
5535
- s(:lit, :rescue)),
5536
- s(:lit, :else)),
5537
- s(:lit, :ensure)))
5704
+ s(:array).line(3),
5705
+ s(:lit, :rescue).line(4)).line(3),
5706
+ s(:lit, :else).line(6)).line(2),
5707
+ s(:lit, :ensure).line(8)).line(2))
5538
5708
 
5539
5709
  assert_parse rb, pt
5540
5710
  end
@@ -5542,9 +5712,11 @@ class TestRubyParserV25 < RubyParserTestCase
5542
5712
  def test_rescue_in_block
5543
5713
  rb = "blah do\nrescue\n stuff\nend"
5544
5714
  pt = s(:iter,
5545
- s(:call, nil, :blah),
5546
- 0,
5547
- s(:rescue, s(:resbody, s(:array), s(:call, nil, :stuff))))
5715
+ s(:call, nil, :blah), 0,
5716
+ s(:rescue,
5717
+ s(:resbody, s(:array).line(2),
5718
+ s(:call, nil, :stuff).line(3)).line(2)).line(2))
5719
+
5548
5720
  assert_parse rb, pt
5549
5721
  end
5550
5722
  end
@@ -5561,21 +5733,21 @@ class TestRubyParserV26 < RubyParserTestCase
5561
5733
  def test_parse_line_dot2_open
5562
5734
  rb = "0..\n; a..\n; c"
5563
5735
  pt = s(:block,
5564
- s(:dot2, s(:lit, 0).line(1), nil).line(1),
5736
+ s(:dot2, s(:lit, 0), nil),
5565
5737
  s(:dot2, s(:call, nil, :a).line(2), nil).line(2),
5566
- s(:call, nil, :c).line(3)).line(1)
5738
+ s(:call, nil, :c).line(3))
5567
5739
 
5568
- assert_parse_line rb, pt, 1
5740
+ assert_parse rb, pt
5569
5741
  end
5570
5742
 
5571
5743
  def test_parse_line_dot3_open
5572
5744
  rb = "0...\n; a...\n; c"
5573
5745
  pt = s(:block,
5574
- s(:dot3, s(:lit, 0).line(1), nil).line(1),
5746
+ s(:dot3, s(:lit, 0), nil),
5575
5747
  s(:dot3, s(:call, nil, :a).line(2), nil).line(2),
5576
- s(:call, nil, :c).line(3)).line(1)
5748
+ s(:call, nil, :c).line(3))
5577
5749
 
5578
- assert_parse_line rb, pt, 1
5750
+ assert_parse rb, pt
5579
5751
  end
5580
5752
  end
5581
5753
 
@@ -5593,21 +5765,21 @@ class TestRubyParserV27 < RubyParserTestCase
5593
5765
  def test_bdot2
5594
5766
  rb = "..10\n; ..a\n; c"
5595
5767
  pt = s(:block,
5596
- s(:dot2, nil, s(:lit, 10).line(1)).line(1),
5768
+ s(:dot2, nil, s(:lit, 10)),
5597
5769
  s(:dot2, nil, s(:call, nil, :a).line(2)).line(2),
5598
- s(:call, nil, :c).line(3)).line(1)
5770
+ s(:call, nil, :c).line(3))
5599
5771
 
5600
- assert_parse_line rb, pt, 1
5772
+ assert_parse rb, pt
5601
5773
  end
5602
5774
 
5603
5775
  def test_bdot3
5604
5776
  rb = "...10\n; ...a\n; c"
5605
5777
  pt = s(:block,
5606
- s(:dot3, nil, s(:lit, 10).line(1)).line(1),
5778
+ s(:dot3, nil, s(:lit, 10)),
5607
5779
  s(:dot3, nil, s(:call, nil, :a).line(2)).line(2),
5608
- s(:call, nil, :c).line(3)).line(1)
5780
+ s(:call, nil, :c).line(3))
5609
5781
 
5610
- assert_parse_line rb, pt, 1
5782
+ assert_parse rb, pt
5611
5783
  end
5612
5784
  end
5613
5785
 
@@ -5621,6 +5793,16 @@ class TestRubyParserV30 < RubyParserTestCase
5621
5793
  end
5622
5794
  end
5623
5795
 
5796
+ class TestRubyParserV31 < RubyParserTestCase
5797
+ include TestRubyParserShared31Plus
5798
+
5799
+ def setup
5800
+ super
5801
+
5802
+ self.processor = RubyParser::V31.new
5803
+ end
5804
+ end
5805
+
5624
5806
  RubyParser::VERSIONS.each do |klass|
5625
5807
  v = klass.version
5626
5808
  describe "block args arity #{v}" do