ruby_parser 3.12.0 → 3.13.0
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.tar.gz.sig +0 -0
- data/History.rdoc +47 -0
- data/Manifest.txt +5 -4
- data/Rakefile +41 -28
- data/compare/normalize.rb +29 -2
- data/debugging.md +18 -0
- data/lib/rp_extensions.rb +0 -7
- data/lib/ruby20_parser.rb +3689 -3502
- data/lib/ruby20_parser.y +284 -201
- data/lib/ruby21_parser.rb +3755 -3570
- data/lib/ruby21_parser.y +281 -197
- data/lib/ruby22_parser.rb +3780 -3600
- data/lib/ruby22_parser.y +281 -202
- data/lib/ruby23_parser.rb +3755 -3591
- data/lib/ruby23_parser.y +282 -203
- data/lib/ruby24_parser.rb +3755 -3591
- data/lib/ruby24_parser.y +282 -203
- data/lib/ruby25_parser.rb +3754 -3591
- data/lib/ruby25_parser.y +282 -203
- data/lib/ruby26_parser.rb +6999 -0
- data/lib/{ruby19_parser.y → ruby26_parser.y} +658 -305
- data/lib/ruby_lexer.rb +116 -118
- data/lib/ruby_lexer.rex +10 -8
- data/lib/ruby_lexer.rex.rb +8 -8
- data/lib/ruby_parser.rb +5 -7
- data/lib/ruby_parser.yy +308 -218
- data/lib/ruby_parser_extras.rb +88 -106
- data/test/test_ruby_lexer.rb +68 -121
- data/test/test_ruby_parser.rb +173 -277
- data/tools/munge.rb +216 -0
- data/tools/ripper.rb +23 -0
- metadata +18 -17
- metadata.gz.sig +1 -1
- data/lib/ruby18_parser.rb +0 -5793
- data/lib/ruby18_parser.y +0 -1908
- data/lib/ruby19_parser.rb +0 -6185
data/test/test_ruby_parser.rb
CHANGED
@@ -244,16 +244,14 @@ module TestRubyParserShared
|
|
244
244
|
|
245
245
|
def test_bug_begin_else
|
246
246
|
rb = "begin 1; else; 2 end"
|
247
|
-
pt = s(:block, s(:lit, 1), s(:lit, 2))
|
248
247
|
|
249
|
-
|
248
|
+
assert_syntax_error rb, "else without rescue is useless"
|
250
249
|
end
|
251
250
|
|
252
251
|
def test_begin_else_return_value
|
253
252
|
rb = "begin; else 2; end"
|
254
|
-
pt = s(:lit, 2)
|
255
253
|
|
256
|
-
|
254
|
+
assert_syntax_error rb, "else without rescue is useless"
|
257
255
|
end
|
258
256
|
|
259
257
|
def test_bug_comment_eq_begin
|
@@ -894,16 +892,6 @@ module TestRubyParserShared
|
|
894
892
|
assert_parse rb, pt
|
895
893
|
end
|
896
894
|
|
897
|
-
# according to 2.3.1 parser -- added: ON 1.8 only:
|
898
|
-
# rp.process("f { |(a,b),c| }") == rp.process("f { |((a,b),c)| }")
|
899
|
-
|
900
|
-
# ruby18 -e "p lambda { |(a,b)| }.arity" # => 2
|
901
|
-
# ruby19 -e "p lambda { |(a,b)| }.arity" # => 1
|
902
|
-
# ruby18 -e "p lambda { |(a,b),c| }.arity" # => 2
|
903
|
-
# ruby19 -e "p lambda { |(a,b),c| }.arity" # => 2
|
904
|
-
# ruby18 -e "p lambda { |((a,b),c)| }.arity" # => 2
|
905
|
-
# ruby19 -e "p lambda { |((a,b),c)| }.arity" # => 1
|
906
|
-
|
907
895
|
def test_bug_args_masgn
|
908
896
|
rb = "f { |(a, b), c| }"
|
909
897
|
pt = s(:iter,
|
@@ -922,20 +910,10 @@ module TestRubyParserShared
|
|
922
910
|
assert_parse rb, pt
|
923
911
|
end
|
924
912
|
|
925
|
-
def ruby18
|
926
|
-
RubyParser::V18 === self.processor
|
927
|
-
end
|
928
|
-
|
929
913
|
def test_bug_comma
|
930
|
-
val = if ruby18 then
|
931
|
-
s(:lit, 100)
|
932
|
-
else
|
933
|
-
s(:str, "d")
|
934
|
-
end
|
935
|
-
|
936
914
|
rb = "if test ?d, dir then end"
|
937
915
|
pt = s(:if,
|
938
|
-
s(:call, nil, :test,
|
916
|
+
s(:call, nil, :test, s(:str, "d"), s(:call, nil, :dir)),
|
939
917
|
nil,
|
940
918
|
nil)
|
941
919
|
|
@@ -979,11 +957,7 @@ module TestRubyParserShared
|
|
979
957
|
|
980
958
|
def test_bug_not_parens
|
981
959
|
rb = "not(a)"
|
982
|
-
pt =
|
983
|
-
s(:not, s(:call, nil, :a))
|
984
|
-
else
|
985
|
-
s(:call, s(:call, nil, :a), :"!")
|
986
|
-
end
|
960
|
+
pt = s(:call, s(:call, nil, :a), :"!")
|
987
961
|
|
988
962
|
assert_parse rb, pt
|
989
963
|
end
|
@@ -1008,6 +982,14 @@ module TestRubyParserShared
|
|
1008
982
|
s(:op_asgn_or, s(:lvar, :a), s(:lasgn, :a, s(:call, nil, :b))),
|
1009
983
|
s(:resbody, s(:array), s(:nil)))
|
1010
984
|
|
985
|
+
# TODO: HRM: this seems more correct IMO. Check against other versions
|
986
|
+
pt = s(:op_asgn_or,
|
987
|
+
s(:lvar, :a),
|
988
|
+
s(:lasgn, :a,
|
989
|
+
s(:rescue,
|
990
|
+
s(:call, nil, :b),
|
991
|
+
s(:resbody, s(:array), s(:nil)))))
|
992
|
+
|
1011
993
|
assert_parse rb, pt
|
1012
994
|
end
|
1013
995
|
|
@@ -1427,7 +1409,7 @@ module TestRubyParserShared
|
|
1427
1409
|
|
1428
1410
|
def test_BEGIN
|
1429
1411
|
rb = "BEGIN { 42 }"
|
1430
|
-
pt = s(:iter, s(:preexe),
|
1412
|
+
pt = s(:iter, s(:preexe), 0, s(:lit, 42))
|
1431
1413
|
|
1432
1414
|
assert_parse rb, pt
|
1433
1415
|
end
|
@@ -1520,8 +1502,6 @@ module TestRubyParserShared
|
|
1520
1502
|
end
|
1521
1503
|
|
1522
1504
|
def test_block_decomp_splat
|
1523
|
-
skip "not that smart yet" if ruby18 # HACK
|
1524
|
-
|
1525
1505
|
rb = "f { |(*a)| }"
|
1526
1506
|
pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :"*a")))
|
1527
1507
|
|
@@ -1546,6 +1526,13 @@ module TestRubyParserShared
|
|
1546
1526
|
assert_parse rb, pt
|
1547
1527
|
end
|
1548
1528
|
|
1529
|
+
def test_alias_resword
|
1530
|
+
rb = "alias in out"
|
1531
|
+
pt = s(:alias, s(:lit, :in), s(:lit, :out))
|
1532
|
+
|
1533
|
+
assert_parse rb, pt
|
1534
|
+
end
|
1535
|
+
|
1549
1536
|
def test_alias_gvar_backref
|
1550
1537
|
rb = "alias $MATCH $&"
|
1551
1538
|
pt = s(:valias, :$MATCH, :$&)
|
@@ -1585,19 +1572,7 @@ module TestRubyParserShared
|
|
1585
1572
|
|
1586
1573
|
def test___ENCODING__
|
1587
1574
|
rb = "__ENCODING__"
|
1588
|
-
pt =
|
1589
|
-
s(:call, nil, :__ENCODING__)
|
1590
|
-
else
|
1591
|
-
if defined? Encoding then
|
1592
|
-
if RubyParser::V18 === processor then
|
1593
|
-
s(:call, nil, :__ENCODING__)
|
1594
|
-
else
|
1595
|
-
s(:colon2, s(:const, :Encoding), :UTF_8)
|
1596
|
-
end
|
1597
|
-
else
|
1598
|
-
s(:str, "Unsupported!")
|
1599
|
-
end
|
1600
|
-
end
|
1575
|
+
pt = s(:colon2, s(:const, :Encoding), :UTF_8)
|
1601
1576
|
|
1602
1577
|
assert_parse rb, pt
|
1603
1578
|
end
|
@@ -1736,6 +1711,8 @@ module TestRubyParserShared
|
|
1736
1711
|
end
|
1737
1712
|
|
1738
1713
|
module TestRubyParserShared19Plus
|
1714
|
+
include TestRubyParserShared
|
1715
|
+
|
1739
1716
|
def test_aref_args_lit_assocs
|
1740
1717
|
rb = "[1, 2 => 3]"
|
1741
1718
|
pt = s(:array, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3)))
|
@@ -2275,8 +2252,6 @@ module TestRubyParserShared19Plus
|
|
2275
2252
|
end
|
2276
2253
|
|
2277
2254
|
def test_symbol_empty
|
2278
|
-
skip "can't do this in ruby 1.8" if RUBY_VERSION < "1.9"
|
2279
|
-
|
2280
2255
|
rb = ":''"
|
2281
2256
|
pt = s(:lit, "".to_sym)
|
2282
2257
|
|
@@ -2430,6 +2405,13 @@ module TestRubyParserShared19Plus
|
|
2430
2405
|
assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)'
|
2431
2406
|
end
|
2432
2407
|
|
2408
|
+
def test_parse_def_special_name
|
2409
|
+
rb = 'def next; end'
|
2410
|
+
pt = s(:defn, :next, s(:args), s(:nil))
|
2411
|
+
|
2412
|
+
assert_parse rb, pt
|
2413
|
+
end
|
2414
|
+
|
2433
2415
|
def test_parse_until_not_canonical
|
2434
2416
|
rb = "until not var.nil?\n 'foo'\nend"
|
2435
2417
|
pt = s(:until,
|
@@ -2697,9 +2679,6 @@ module TestRubyParserShared19Plus
|
|
2697
2679
|
assert_parse rb, pt
|
2698
2680
|
end
|
2699
2681
|
|
2700
|
-
# In 1.8, block args with an outer set of parens are superfluous.
|
2701
|
-
# In 1.9, outer set of parens are NOT... they are an explicit extra masgn.
|
2702
|
-
|
2703
2682
|
def test_iter_args_2__19
|
2704
2683
|
rb = "f { |(a, b)| }"
|
2705
2684
|
pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b)))
|
@@ -2918,76 +2897,9 @@ module TestRubyParserShared19Plus
|
|
2918
2897
|
end
|
2919
2898
|
end
|
2920
2899
|
|
2921
|
-
module TestRubyParserShared21Plus
|
2922
|
-
def test_f_kw
|
2923
|
-
rb = "def x k:42; end"
|
2924
|
-
pt = s(:defn, :x, s(:args, s(:kwarg, :k, s(:lit, 42))), s(:nil))
|
2925
|
-
|
2926
|
-
assert_parse rb, pt
|
2927
|
-
end
|
2928
|
-
|
2929
|
-
def test_f_kw__required
|
2930
|
-
rb = "def x k:; end"
|
2931
|
-
pt = s(:defn, :x, s(:args, s(:kwarg, :k)), s(:nil))
|
2932
|
-
|
2933
|
-
assert_parse rb, pt
|
2934
|
-
end
|
2935
|
-
|
2936
|
-
def test_block_kw
|
2937
|
-
rb = "blah { |k:42| }"
|
2938
|
-
pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k, s(:lit, 42))))
|
2939
|
-
|
2940
|
-
assert_parse rb, pt
|
2941
|
-
|
2942
|
-
rb = "blah { |k:42| }"
|
2943
|
-
assert_parse rb, pt
|
2944
|
-
end
|
2945
|
-
|
2946
|
-
def test_block_kw__required
|
2947
|
-
rb = "blah do |k:| end"
|
2948
|
-
pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k)))
|
2949
|
-
|
2950
|
-
assert_parse rb, pt
|
2951
|
-
|
2952
|
-
rb = "blah do |k:| end"
|
2953
|
-
assert_parse rb, pt
|
2954
|
-
end
|
2955
|
-
|
2956
|
-
def test_stabby_block_kw
|
2957
|
-
rb = "-> (k:42) { }"
|
2958
|
-
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k, s(:lit, 42))))
|
2959
|
-
|
2960
|
-
assert_parse rb, pt
|
2961
|
-
end
|
2962
|
-
|
2963
|
-
def test_stabby_block_kw__required
|
2964
|
-
rb = "-> (k:) { }"
|
2965
|
-
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k)))
|
2966
|
-
|
2967
|
-
assert_parse rb, pt
|
2968
|
-
end
|
2969
|
-
|
2970
|
-
def test_parse_line_heredoc_hardnewline
|
2971
|
-
skip "not yet"
|
2972
|
-
|
2973
|
-
rb = <<-'CODE'.gsub(/^ /, '')
|
2974
|
-
<<-EOFOO
|
2975
|
-
\n\n\n\n\n\n\n\n\n
|
2976
|
-
EOFOO
|
2977
|
-
|
2978
|
-
class Foo
|
2979
|
-
end
|
2980
|
-
CODE
|
2981
|
-
|
2982
|
-
pt = s(:block,
|
2983
|
-
s(:str, "\n\n\n\n\n\n\n\n\n\n").line(1),
|
2984
|
-
s(:class, :Foo, nil).line(5)).line(1)
|
2985
|
-
|
2986
|
-
assert_parse rb, pt
|
2987
|
-
end
|
2988
|
-
end
|
2989
|
-
|
2990
2900
|
module TestRubyParserShared20Plus
|
2901
|
+
include TestRubyParserShared19Plus
|
2902
|
+
|
2991
2903
|
def test_non_interpolated_symbol_array_line_breaks
|
2992
2904
|
|
2993
2905
|
rb = "%i(\na\nb\n)\n1"
|
@@ -3293,7 +3205,87 @@ module TestRubyParserShared20Plus
|
|
3293
3205
|
end
|
3294
3206
|
end
|
3295
3207
|
|
3208
|
+
module TestRubyParserShared21Plus
|
3209
|
+
include TestRubyParserShared20Plus
|
3210
|
+
|
3211
|
+
def test_defn_unary_not
|
3212
|
+
rb = "def !@; true; end" # I seriously HATE this
|
3213
|
+
pt = s(:defn, :"!@", s(:args), s(:true))
|
3214
|
+
|
3215
|
+
assert_parse rb, pt
|
3216
|
+
end
|
3217
|
+
|
3218
|
+
def test_f_kw
|
3219
|
+
rb = "def x k:42; end"
|
3220
|
+
pt = s(:defn, :x, s(:args, s(:kwarg, :k, s(:lit, 42))), s(:nil))
|
3221
|
+
|
3222
|
+
assert_parse rb, pt
|
3223
|
+
end
|
3224
|
+
|
3225
|
+
def test_f_kw__required
|
3226
|
+
rb = "def x k:; end"
|
3227
|
+
pt = s(:defn, :x, s(:args, s(:kwarg, :k)), s(:nil))
|
3228
|
+
|
3229
|
+
assert_parse rb, pt
|
3230
|
+
end
|
3231
|
+
|
3232
|
+
def test_block_kw
|
3233
|
+
rb = "blah { |k:42| }"
|
3234
|
+
pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k, s(:lit, 42))))
|
3235
|
+
|
3236
|
+
assert_parse rb, pt
|
3237
|
+
|
3238
|
+
rb = "blah { |k:42| }"
|
3239
|
+
assert_parse rb, pt
|
3240
|
+
end
|
3241
|
+
|
3242
|
+
def test_block_kw__required
|
3243
|
+
rb = "blah do |k:| end"
|
3244
|
+
pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k)))
|
3245
|
+
|
3246
|
+
assert_parse rb, pt
|
3247
|
+
|
3248
|
+
rb = "blah do |k:| end"
|
3249
|
+
assert_parse rb, pt
|
3250
|
+
end
|
3251
|
+
|
3252
|
+
def test_stabby_block_kw
|
3253
|
+
rb = "-> (k:42) { }"
|
3254
|
+
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k, s(:lit, 42))))
|
3255
|
+
|
3256
|
+
assert_parse rb, pt
|
3257
|
+
end
|
3258
|
+
|
3259
|
+
def test_stabby_block_kw__required
|
3260
|
+
rb = "-> (k:) { }"
|
3261
|
+
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k)))
|
3262
|
+
|
3263
|
+
assert_parse rb, pt
|
3264
|
+
end
|
3265
|
+
|
3266
|
+
def test_parse_line_heredoc_hardnewline
|
3267
|
+
skip "not yet"
|
3268
|
+
|
3269
|
+
rb = <<-'CODE'.gsub(/^ /, '')
|
3270
|
+
<<-EOFOO
|
3271
|
+
\n\n\n\n\n\n\n\n\n
|
3272
|
+
EOFOO
|
3273
|
+
|
3274
|
+
class Foo
|
3275
|
+
end
|
3276
|
+
CODE
|
3277
|
+
|
3278
|
+
pt = s(:block,
|
3279
|
+
s(:str, "\n\n\n\n\n\n\n\n\n\n").line(1),
|
3280
|
+
s(:class, :Foo, nil).line(5)).line(1)
|
3281
|
+
|
3282
|
+
assert_parse rb, pt
|
3283
|
+
end
|
3284
|
+
end
|
3285
|
+
|
3296
3286
|
module TestRubyParserShared22Plus
|
3287
|
+
include TestRubyParserShared21Plus
|
3288
|
+
|
3297
3289
|
def test_call_args_assoc_quoted
|
3298
3290
|
pt = s(:call, nil, :x, s(:hash, s(:lit, :k), s(:lit, 42)))
|
3299
3291
|
|
@@ -3335,6 +3327,8 @@ module TestRubyParserShared22Plus
|
|
3335
3327
|
end
|
3336
3328
|
|
3337
3329
|
module TestRubyParserShared23Plus
|
3330
|
+
include TestRubyParserShared22Plus
|
3331
|
+
|
3338
3332
|
def test_safe_call
|
3339
3333
|
rb = "a&.b"
|
3340
3334
|
pt = s(:safe_call, s(:call, nil, :a), :b)
|
@@ -3472,16 +3466,46 @@ a + b
|
|
3472
3466
|
end
|
3473
3467
|
|
3474
3468
|
module TestRubyParserShared24Plus
|
3469
|
+
include TestRubyParserShared23Plus
|
3470
|
+
|
3475
3471
|
# ...version specific tests to go here...
|
3476
3472
|
end
|
3477
3473
|
|
3478
3474
|
module TestRubyParserShared25Plus
|
3475
|
+
include TestRubyParserShared24Plus
|
3476
|
+
|
3479
3477
|
# ...version specific tests to go here...
|
3480
3478
|
end
|
3481
3479
|
|
3480
|
+
module TestRubyParserShared26Plus
|
3481
|
+
include TestRubyParserShared25Plus
|
3482
|
+
|
3483
|
+
def test_symbol_list
|
3484
|
+
rb = '%I[#{a} #{b}]'
|
3485
|
+
pt = s(:array,
|
3486
|
+
s(:dsym, "", s(:evstr, s(:call, nil, :a))),
|
3487
|
+
s(:dsym, "", s(:evstr, s(:call, nil, :b))))
|
3488
|
+
|
3489
|
+
assert_parse rb, pt
|
3490
|
+
end
|
3491
|
+
|
3492
|
+
def test_dot2_nil__26
|
3493
|
+
rb = "a.."
|
3494
|
+
pt = s(:dot2, s(:call, nil, :a), nil)
|
3495
|
+
|
3496
|
+
assert_parse rb, pt
|
3497
|
+
end
|
3498
|
+
|
3499
|
+
def test_dot3_nil__26
|
3500
|
+
rb = "a..."
|
3501
|
+
pt = s(:dot3, s(:call, nil, :a), nil)
|
3502
|
+
|
3503
|
+
assert_parse rb, pt
|
3504
|
+
end
|
3505
|
+
end
|
3506
|
+
|
3482
3507
|
class TestRubyParser < Minitest::Test
|
3483
3508
|
def test_cls_version
|
3484
|
-
assert_equal 18, RubyParser::V18.version
|
3485
3509
|
assert_equal 23, RubyParser::V23.version
|
3486
3510
|
assert_equal 24, RubyParser::V24.version
|
3487
3511
|
assert_equal 24, Ruby24Parser.version
|
@@ -3491,15 +3515,6 @@ class TestRubyParser < Minitest::Test
|
|
3491
3515
|
def test_parse
|
3492
3516
|
processor = RubyParser.new
|
3493
3517
|
|
3494
|
-
# 1.8 only syntax
|
3495
|
-
rb = "while false : 42 end"
|
3496
|
-
pt = s(:while, s(:false), s(:lit, 42), true)
|
3497
|
-
|
3498
|
-
assert_silent do
|
3499
|
-
assert_equal pt, processor.parse(rb)
|
3500
|
-
end
|
3501
|
-
|
3502
|
-
# 1.9 only syntax
|
3503
3518
|
rb = "a.()"
|
3504
3519
|
pt = s(:call, s(:call, nil, :a), :call)
|
3505
3520
|
|
@@ -3512,8 +3527,20 @@ class TestRubyParser < Minitest::Test
|
|
3512
3527
|
end
|
3513
3528
|
end
|
3514
3529
|
|
3515
|
-
|
3516
|
-
|
3530
|
+
assert_includes e.message, 'parse error on value "$end"'
|
3531
|
+
end
|
3532
|
+
|
3533
|
+
def test_parse_error_from_first
|
3534
|
+
processor = RubyParser.new
|
3535
|
+
|
3536
|
+
e = assert_raises Racc::ParseError do
|
3537
|
+
capture_io do
|
3538
|
+
processor.parse "a -> () {"
|
3539
|
+
end
|
3540
|
+
end
|
3541
|
+
|
3542
|
+
# This is a 2.x error, will fail on 1.8/1.9.
|
3543
|
+
assert_includes e.message, 'parse error on value "$end"'
|
3517
3544
|
end
|
3518
3545
|
end
|
3519
3546
|
|
@@ -3578,119 +3605,7 @@ class RubyParserTestCase < ParseTreeTestCase
|
|
3578
3605
|
end
|
3579
3606
|
end
|
3580
3607
|
|
3581
|
-
class TestRubyParserV18 < RubyParserTestCase
|
3582
|
-
include TestRubyParserShared
|
3583
|
-
|
3584
|
-
def setup
|
3585
|
-
super
|
3586
|
-
|
3587
|
-
self.processor = RubyParser::V18.new
|
3588
|
-
end
|
3589
|
-
|
3590
|
-
def test_assoc_list_18
|
3591
|
-
rb = "{1, 2, 3, 4}"
|
3592
|
-
pt = s(:hash, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4))
|
3593
|
-
|
3594
|
-
assert_parse rb, pt
|
3595
|
-
end
|
3596
|
-
|
3597
|
-
def test_case_then_colon_18
|
3598
|
-
rb = "case x; when Fixnum: 42; end"
|
3599
|
-
pt = s(:case,
|
3600
|
-
s(:call, nil, :x),
|
3601
|
-
s(:when, s(:array, s(:const, :Fixnum)), s(:lit, 42)),
|
3602
|
-
nil)
|
3603
|
-
|
3604
|
-
assert_parse rb, pt
|
3605
|
-
end
|
3606
|
-
|
3607
|
-
def test_do_colon_18
|
3608
|
-
rb = "while false : 42 end"
|
3609
|
-
pt = s(:while, s(:false), s(:lit, 42), true)
|
3610
|
-
|
3611
|
-
assert_parse rb, pt
|
3612
|
-
end
|
3613
|
-
|
3614
|
-
def test_call_space_before_paren_args_18
|
3615
|
-
rb = "a (:b, :c, :d => :e)"
|
3616
|
-
pt = s(:call, nil, :a,
|
3617
|
-
s(:lit, :b),
|
3618
|
-
s(:lit, :c),
|
3619
|
-
s(:hash, s(:lit, :d), s(:lit, :e)))
|
3620
|
-
|
3621
|
-
assert_parse rb, pt
|
3622
|
-
end
|
3623
|
-
|
3624
|
-
# In 1.8, block args with an outer set of parens are superfluous.
|
3625
|
-
# In 1.9, outer set of parens are NOT... they are an explicit extra masgn.
|
3626
|
-
|
3627
|
-
def test_iter_args_2_18
|
3628
|
-
rb = "f { |(a, b)| }"
|
3629
|
-
pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b))
|
3630
|
-
|
3631
|
-
assert_parse rb, pt
|
3632
|
-
end
|
3633
|
-
|
3634
|
-
def test_bug_args__18
|
3635
|
-
rb = "f { |(a, b)| }"
|
3636
|
-
pt = s(:iter, s(:call, nil, :f),
|
3637
|
-
s(:args, :a, :b))
|
3638
|
-
|
3639
|
-
assert_parse rb, pt
|
3640
|
-
end
|
3641
|
-
|
3642
|
-
def test_bug_args_masgn_outer_parens__18
|
3643
|
-
rb = "f { |((a, b), c)| }"
|
3644
|
-
pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn
|
3645
|
-
s(:call, nil, :f),
|
3646
|
-
s(:args, s(:masgn, :a, :b), :c))
|
3647
|
-
|
3648
|
-
assert_parse rb, pt.dup
|
3649
|
-
end
|
3650
|
-
|
3651
|
-
def test_double_block_error_10
|
3652
|
-
assert_syntax_error "a.b (&b) {}", BLOCK_DUP_MSG
|
3653
|
-
end
|
3654
|
-
|
3655
|
-
def test_double_block_error_11
|
3656
|
-
assert_syntax_error "a (1, &b) { }", BLOCK_DUP_MSG
|
3657
|
-
end
|
3658
|
-
|
3659
|
-
def test_double_block_error_12
|
3660
|
-
assert_syntax_error "a (1, &b) do end", BLOCK_DUP_MSG
|
3661
|
-
end
|
3662
|
-
|
3663
|
-
def test_double_block_error_13
|
3664
|
-
assert_syntax_error "m.a (1, &b) { }", BLOCK_DUP_MSG
|
3665
|
-
end
|
3666
|
-
|
3667
|
-
def test_double_block_error_14
|
3668
|
-
assert_syntax_error "m.a (1, &b) do end", BLOCK_DUP_MSG
|
3669
|
-
end
|
3670
|
-
|
3671
|
-
def test_double_block_error_15
|
3672
|
-
assert_syntax_error "m::a (1, &b) { }", BLOCK_DUP_MSG
|
3673
|
-
end
|
3674
|
-
|
3675
|
-
def test_double_block_error_16
|
3676
|
-
assert_syntax_error "m::a (1, &b) do end", BLOCK_DUP_MSG
|
3677
|
-
end
|
3678
|
-
end
|
3679
|
-
|
3680
|
-
class TestRubyParserV19 < RubyParserTestCase
|
3681
|
-
include TestRubyParserShared
|
3682
|
-
include TestRubyParserShared19Plus
|
3683
|
-
|
3684
|
-
def setup
|
3685
|
-
super
|
3686
|
-
|
3687
|
-
self.processor = RubyParser::V19.new
|
3688
|
-
end
|
3689
|
-
end
|
3690
|
-
|
3691
3608
|
class TestRubyParserV20 < RubyParserTestCase
|
3692
|
-
include TestRubyParserShared
|
3693
|
-
include TestRubyParserShared19Plus
|
3694
3609
|
include TestRubyParserShared20Plus
|
3695
3610
|
|
3696
3611
|
def setup
|
@@ -3698,19 +3613,9 @@ class TestRubyParserV20 < RubyParserTestCase
|
|
3698
3613
|
|
3699
3614
|
self.processor = RubyParser::V20.new
|
3700
3615
|
end
|
3701
|
-
|
3702
|
-
def test_defn_unary_not
|
3703
|
-
rb = "def !@; true; end" # I seriously HATE this
|
3704
|
-
pt = s(:defn, :"!@", s(:args), s(:true))
|
3705
|
-
|
3706
|
-
assert_parse rb, pt
|
3707
|
-
end
|
3708
3616
|
end
|
3709
3617
|
|
3710
3618
|
class TestRubyParserV21 < RubyParserTestCase
|
3711
|
-
include TestRubyParserShared
|
3712
|
-
include TestRubyParserShared19Plus
|
3713
|
-
include TestRubyParserShared20Plus
|
3714
3619
|
include TestRubyParserShared21Plus
|
3715
3620
|
|
3716
3621
|
def setup
|
@@ -3721,10 +3626,6 @@ class TestRubyParserV21 < RubyParserTestCase
|
|
3721
3626
|
end
|
3722
3627
|
|
3723
3628
|
class TestRubyParserV22 < RubyParserTestCase
|
3724
|
-
include TestRubyParserShared
|
3725
|
-
include TestRubyParserShared19Plus
|
3726
|
-
include TestRubyParserShared20Plus
|
3727
|
-
include TestRubyParserShared21Plus
|
3728
3629
|
include TestRubyParserShared22Plus
|
3729
3630
|
|
3730
3631
|
def setup
|
@@ -3735,11 +3636,6 @@ class TestRubyParserV22 < RubyParserTestCase
|
|
3735
3636
|
end
|
3736
3637
|
|
3737
3638
|
class TestRubyParserV23 < RubyParserTestCase
|
3738
|
-
include TestRubyParserShared
|
3739
|
-
include TestRubyParserShared19Plus
|
3740
|
-
include TestRubyParserShared20Plus
|
3741
|
-
include TestRubyParserShared21Plus
|
3742
|
-
include TestRubyParserShared22Plus
|
3743
3639
|
include TestRubyParserShared23Plus
|
3744
3640
|
|
3745
3641
|
def setup
|
@@ -3750,12 +3646,6 @@ class TestRubyParserV23 < RubyParserTestCase
|
|
3750
3646
|
end
|
3751
3647
|
|
3752
3648
|
class TestRubyParserV24 < RubyParserTestCase
|
3753
|
-
include TestRubyParserShared
|
3754
|
-
include TestRubyParserShared19Plus
|
3755
|
-
include TestRubyParserShared20Plus
|
3756
|
-
include TestRubyParserShared21Plus
|
3757
|
-
include TestRubyParserShared22Plus
|
3758
|
-
include TestRubyParserShared23Plus
|
3759
3649
|
include TestRubyParserShared24Plus
|
3760
3650
|
|
3761
3651
|
def setup
|
@@ -3766,13 +3656,6 @@ class TestRubyParserV24 < RubyParserTestCase
|
|
3766
3656
|
end
|
3767
3657
|
|
3768
3658
|
class TestRubyParserV25 < RubyParserTestCase
|
3769
|
-
include TestRubyParserShared
|
3770
|
-
include TestRubyParserShared19Plus
|
3771
|
-
include TestRubyParserShared20Plus
|
3772
|
-
include TestRubyParserShared21Plus
|
3773
|
-
include TestRubyParserShared22Plus
|
3774
|
-
include TestRubyParserShared23Plus
|
3775
|
-
include TestRubyParserShared24Plus
|
3776
3659
|
include TestRubyParserShared25Plus
|
3777
3660
|
|
3778
3661
|
def setup
|
@@ -3783,7 +3666,10 @@ class TestRubyParserV25 < RubyParserTestCase
|
|
3783
3666
|
|
3784
3667
|
def test_rescue_in_block
|
3785
3668
|
rb = "blah do\nrescue\n stuff\nend"
|
3786
|
-
pt = s(:iter,
|
3669
|
+
pt = s(:iter,
|
3670
|
+
s(:call, nil, :blah),
|
3671
|
+
0,
|
3672
|
+
s(:rescue, s(:resbody, s(:array), s(:call, nil, :stuff))))
|
3787
3673
|
assert_parse rb, pt
|
3788
3674
|
end
|
3789
3675
|
|
@@ -3848,6 +3734,16 @@ class TestRubyParserV25 < RubyParserTestCase
|
|
3848
3734
|
end
|
3849
3735
|
end
|
3850
3736
|
|
3737
|
+
class TestRubyParserV26 < RubyParserTestCase
|
3738
|
+
include TestRubyParserShared26Plus
|
3739
|
+
|
3740
|
+
def setup
|
3741
|
+
super
|
3742
|
+
|
3743
|
+
self.processor = RubyParser::V26.new
|
3744
|
+
end
|
3745
|
+
end
|
3746
|
+
|
3851
3747
|
RubyParser::VERSIONS.each do |klass|
|
3852
3748
|
v = klass.version
|
3853
3749
|
describe "block args arity #{v}" do
|