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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +40 -0
- data/Manifest.txt +2 -0
- data/README.rdoc +8 -6
- data/Rakefile +18 -7
- data/gauntlet.md +19 -18
- data/lib/ruby20_parser.rb +5880 -2029
- data/lib/ruby20_parser.y +23 -30
- data/lib/ruby21_parser.rb +5856 -2052
- data/lib/ruby21_parser.y +23 -30
- data/lib/ruby22_parser.rb +5978 -2077
- data/lib/ruby22_parser.y +23 -30
- data/lib/ruby23_parser.rb +5982 -2081
- data/lib/ruby23_parser.y +23 -30
- data/lib/ruby24_parser.rb +6070 -2101
- data/lib/ruby24_parser.y +23 -30
- data/lib/ruby25_parser.rb +6070 -2101
- data/lib/ruby25_parser.y +23 -30
- data/lib/ruby26_parser.rb +6072 -2100
- data/lib/ruby26_parser.y +23 -30
- data/lib/ruby27_parser.rb +6871 -2402
- data/lib/ruby27_parser.y +28 -44
- data/lib/ruby30_parser.rb +7177 -2676
- data/lib/ruby30_parser.y +77 -93
- data/lib/ruby31_parser.rb +13622 -0
- data/lib/ruby31_parser.y +3481 -0
- data/lib/ruby3_parser.yy +161 -92
- data/lib/ruby_parser.rb +2 -0
- data/lib/ruby_parser.yy +28 -44
- data/lib/ruby_parser_extras.rb +55 -2
- data/test/test_ruby_parser.rb +526 -344
- data.tar.gz.sig +1 -4
- metadata +18 -13
- metadata.gz.sig +0 -0
data/test/test_ruby_parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
|
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)
|
92
|
+
s(:true),
|
93
93
|
s(:and,
|
94
94
|
s(:call, s(:false).line(2), :!).line(2),
|
95
|
-
s(:true).line(3)).line(2))
|
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))
|
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)
|
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)
|
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)
|
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)
|
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)
|
265
|
+
head = s(:block, s(:args))
|
266
266
|
tail = s(:zsuper).line(2)
|
267
267
|
expected = s(:block,
|
268
|
-
s(:args)
|
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)
|
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)
|
703
|
-
|
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)
|
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)
|
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,
|
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")
|
895
|
-
s(:lasgn, :d, s(:lit, 42).line(7)).line(7))
|
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")
|
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))
|
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,
|
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)
|
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)
|
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)
|
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)
|
1058
|
-
s(:call, nil, :a).line(7))
|
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))
|
1090
|
-
s(:lit, 1).line(5))
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
1319
|
-
s(:call, nil, :b).line(2))
|
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)
|
1375
|
+
s(:lasgn, :a),
|
1369
1376
|
s(:attrasgn,
|
1370
|
-
s(:call, nil, :b)
|
1371
|
-
:c=)
|
1377
|
+
s(:call, nil, :b),
|
1378
|
+
:c=)),
|
1372
1379
|
s(:to_ary,
|
1373
|
-
s(:call, nil, :d)
|
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))
|
1466
|
-
s(:lit, 1).line(5))
|
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
|
-
|
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)
|
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)
|
1629
|
+
s(:call, nil, :a),
|
1629
1630
|
s(:call, nil, :b).line(2),
|
1630
|
-
s(:call, nil, :c).line(4))
|
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)
|
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)
|
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
|
-
|
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)
|
1669
|
+
pt = s(:defn, :f, s(:args, :a), s(:nil))
|
1669
1670
|
|
1670
|
-
|
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
|
-
|
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)
|
1690
|
+
pt = s(:defn, :f, s(:args), s(:nil))
|
1690
1691
|
|
1691
1692
|
rb = "def f\nend"
|
1692
|
-
|
1693
|
+
assert_parse rb, pt
|
1693
1694
|
|
1694
1695
|
processor.reset
|
1695
1696
|
|
1696
1697
|
rb = "def f\n\nend"
|
1697
|
-
|
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)
|
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))
|
1708
|
+
s(:call, nil, :c).line(5))
|
1708
1709
|
|
1709
|
-
|
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)
|
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))
|
1720
|
+
s(:call, nil, :c).line(5))
|
1720
1721
|
|
1721
|
-
|
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)
|
1729
|
-
s(:true).line(3))
|
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))
|
1738
|
-
s(:true).line(4))
|
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))
|
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
|
-
)
|
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")
|
1773
|
-
:strip)
|
1774
|
-
)
|
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
|
-
)
|
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
|
-
)
|
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")
|
1803
|
-
s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4))
|
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)
|
1813
|
-
s(:args, :x, :y)
|
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))
|
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
|
-
|
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")
|
1841
|
-
s(:lit, 1).line(3))
|
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")
|
1850
|
-
s(:lit, 1).line(2))
|
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
|
-
|
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)
|
1873
|
+
s(:lvar, :foo),
|
1873
1874
|
:+,
|
1874
|
-
s(:call, nil, :bar).line(2))
|
1875
|
-
s(:call, nil, :baz).line(3))
|
1875
|
+
s(:call, nil, :bar).line(2))),
|
1876
|
+
s(:call, nil, :baz).line(3))
|
1876
1877
|
|
1877
|
-
|
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)
|
1884
|
-
s(:call, nil, :foo).line(2))
|
1884
|
+
s(:postexe), 0,
|
1885
|
+
s(:call, nil, :foo).line(2))
|
1885
1886
|
|
1886
|
-
|
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)
|
1893
|
-
s(:call, nil, :foo).line(2))
|
1893
|
+
s(:preexe), 0,
|
1894
|
+
s(:call, nil, :foo).line(2))
|
1894
1895
|
|
1895
|
-
|
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
|
-
|
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
|
-
|
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")
|
1934
|
-
s(:true)
|
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)
|
1944
|
-
s(:to_ary, s(:call, nil, :c).line(2)).line(2))
|
1945
|
-
s(:call, nil, :d).line(3))
|
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
|
-
|
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)
|
1954
|
-
s(:call, nil, :b).line(2))
|
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, "",
|
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#")
|
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")
|
2121
|
-
s(:call, nil, :b).line(2))
|
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")
|
2130
|
-
s(:call, nil, :b)
|
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")
|
2139
|
-
s(:call, nil, :b)
|
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")
|
2148
|
-
s(:call, nil, :b).line(2))
|
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")
|
2157
|
-
s(:call, nil, :b)
|
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")
|
2166
|
-
s(:call, nil, :b)
|
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,
|
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)
|
2726
|
-
s(:nil)
|
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)
|
3185
|
-
:b)
|
3186
|
-
:d)
|
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)
|
3208
|
-
s(:dot2, nil, s(:lit, 3).line(2)).line(2))
|
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)
|
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")
|
3554
|
-
s(:lit, 0).line(7))
|
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),
|
3682
|
-
|
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,
|
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
|
-
:*))
|
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))
|
3879
|
-
s(:lit, 1).line(5))
|
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))
|
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")
|
4079
|
-
s(:class, :Foo, nil).line(5))
|
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))
|
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, :+)
|
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,
|
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")
|
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
|
-
)
|
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))
|
4433
|
-
s(:dsym, "", s(:evstr, s(:call, nil, :b))
|
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)
|
4470
|
+
pt = s(:case, s(:lit, :a),
|
4455
4471
|
s(:in, exp_pt, nil).line(2),
|
4456
|
-
nil)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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")
|
4896
|
-
s(:in, s(:const, :String)
|
4897
|
-
nil)
|
4898
|
-
nil)
|
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)
|
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)
|
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)
|
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)
|
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)
|
4946
|
-
s(:lit, 1)
|
4947
|
-
s(:lit, 2)
|
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)
|
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)
|
4970
|
-
s(:lit, 0)
|
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)
|
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)
|
4992
|
-
s(:lit, 0)
|
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)
|
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)
|
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)
|
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)
|
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)
|
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)
|
5059
|
+
# pt = s(:case, s(:lit, :a),
|
5044
5060
|
# s(:in,
|
5045
5061
|
# ZZZ,
|
5046
5062
|
# WWW).line(2),
|
5047
|
-
# nil)
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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")
|
5136
|
-
s(:nil)
|
5151
|
+
pt = s(:defn, :x, s(:args, :"**nil"),
|
5152
|
+
s(:nil))
|
5137
5153
|
|
5138
|
-
|
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)
|
5183
|
-
s(:in, s(:lvar, :n)
|
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)
|
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)
|
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)
|
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)
|
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)
|
5221
|
-
s(:call, nil, :system, s(:lvar, :cmd)
|
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
|
-
|
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(:
|
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
|
-
|
5348
|
-
|
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(:
|
5506
|
-
|
5507
|
-
|
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
|
-
|
5547
|
-
|
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)
|
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))
|
5738
|
+
s(:call, nil, :c).line(3))
|
5567
5739
|
|
5568
|
-
|
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)
|
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))
|
5748
|
+
s(:call, nil, :c).line(3))
|
5577
5749
|
|
5578
|
-
|
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)
|
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))
|
5770
|
+
s(:call, nil, :c).line(3))
|
5599
5771
|
|
5600
|
-
|
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)
|
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))
|
5780
|
+
s(:call, nil, :c).line(3))
|
5609
5781
|
|
5610
|
-
|
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
|