ruby_parser 3.6.6 → 3.7.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/.autotest +12 -2
- data/History.txt +18 -0
- data/Manifest.txt +3 -0
- data/Rakefile +33 -6
- data/lib/ruby18_parser.rb +8 -5
- data/lib/ruby18_parser.y +4 -4
- data/lib/ruby19_parser.rb +12 -9
- data/lib/ruby19_parser.y +8 -8
- data/lib/ruby20_parser.rb +87 -73
- data/lib/ruby20_parser.y +27 -15
- data/lib/ruby21_parser.rb +27 -14
- data/lib/ruby21_parser.y +26 -16
- data/lib/ruby22_parser.rb +6792 -0
- data/lib/ruby22_parser.y +2369 -0
- data/lib/ruby_lexer.rb +44 -11
- data/lib/ruby_lexer.rex +3 -1
- data/lib/ruby_lexer.rex.rb +4 -0
- data/lib/ruby_parser.rb +1 -0
- data/lib/ruby_parser.yy +2456 -0
- data/lib/ruby_parser_extras.rb +10 -2
- data/test/test_ruby_lexer.rb +9 -7
- data/test/test_ruby_parser.rb +151 -33
- metadata +5 -16
- metadata.gz.sig +3 -2
data/lib/ruby_parser_extras.rb
CHANGED
@@ -91,7 +91,7 @@ class RPStringScanner < StringScanner
|
|
91
91
|
end
|
92
92
|
|
93
93
|
module RubyParserStuff
|
94
|
-
VERSION = "3.
|
94
|
+
VERSION = "3.7.0" unless constants.include? "VERSION" # SIGH
|
95
95
|
|
96
96
|
attr_accessor :lexer, :in_def, :in_single, :file
|
97
97
|
attr_reader :env, :comments
|
@@ -1319,6 +1319,10 @@ module RubyParserStuff
|
|
1319
1319
|
end
|
1320
1320
|
end
|
1321
1321
|
|
1322
|
+
class Ruby22Parser < Racc::Parser
|
1323
|
+
include RubyParserStuff
|
1324
|
+
end
|
1325
|
+
|
1322
1326
|
class Ruby21Parser < Racc::Parser
|
1323
1327
|
include RubyParserStuff
|
1324
1328
|
end
|
@@ -1348,11 +1352,12 @@ class RubyParser
|
|
1348
1352
|
@p19 = Ruby19Parser.new
|
1349
1353
|
@p20 = Ruby20Parser.new
|
1350
1354
|
@p21 = Ruby21Parser.new
|
1355
|
+
@p22 = Ruby22Parser.new
|
1351
1356
|
end
|
1352
1357
|
|
1353
1358
|
def process s, f = "(string)", t = 10
|
1354
1359
|
e = nil
|
1355
|
-
[@p21, @p20, @p19, @p18].each do |parser|
|
1360
|
+
[@p22, @p21, @p20, @p19, @p18].each do |parser|
|
1356
1361
|
begin
|
1357
1362
|
return parser.process s, f, t
|
1358
1363
|
rescue Racc::ParseError, RubyParser::SyntaxError => exc
|
@@ -1369,6 +1374,7 @@ class RubyParser
|
|
1369
1374
|
@p19.reset
|
1370
1375
|
@p20.reset
|
1371
1376
|
@p21.reset
|
1377
|
+
@p22.reset
|
1372
1378
|
end
|
1373
1379
|
|
1374
1380
|
def self.for_current_ruby
|
@@ -1381,6 +1387,8 @@ class RubyParser
|
|
1381
1387
|
Ruby20Parser.new
|
1382
1388
|
when /^2.1/ then
|
1383
1389
|
Ruby21Parser.new
|
1390
|
+
when /^2.2/ then
|
1391
|
+
Ruby22Parser.new
|
1384
1392
|
else
|
1385
1393
|
raise "unrecognized RUBY_VERSION #{RUBY_VERSION}"
|
1386
1394
|
end
|
data/test/test_ruby_lexer.rb
CHANGED
@@ -518,10 +518,10 @@ class TestRubyLexer < Minitest::Test
|
|
518
518
|
def test_yylex_const_call_same_name
|
519
519
|
assert_lex("X = a { }; b { f :c }",
|
520
520
|
s(:block,
|
521
|
-
s(:cdecl, :X, s(:iter, s(:call, nil, :a),
|
521
|
+
s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)),
|
522
522
|
s(:iter,
|
523
523
|
s(:call, nil, :b),
|
524
|
-
|
524
|
+
0,
|
525
525
|
s(:call, nil, :f, s(:lit, :c)))),
|
526
526
|
|
527
527
|
:tCONSTANT, "X", :expr_cmdarg, 0, 0,
|
@@ -539,10 +539,10 @@ class TestRubyLexer < Minitest::Test
|
|
539
539
|
|
540
540
|
assert_lex("X = a { }; b { X :c }",
|
541
541
|
s(:block,
|
542
|
-
s(:cdecl, :X, s(:iter, s(:call, nil, :a),
|
542
|
+
s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)),
|
543
543
|
s(:iter,
|
544
544
|
s(:call, nil, :b),
|
545
|
-
|
545
|
+
0,
|
546
546
|
s(:call, nil, :X, s(:lit, :c)))),
|
547
547
|
|
548
548
|
:tCONSTANT, "X", :expr_cmdarg, 0, 0,
|
@@ -2294,10 +2294,12 @@ class TestRubyLexer < Minitest::Test
|
|
2294
2294
|
end
|
2295
2295
|
|
2296
2296
|
def test_yylex_string_double_pound_dollar_bad
|
2297
|
+
skip if Ruby18Parser === lexer.parser
|
2298
|
+
|
2297
2299
|
assert_lex3('"#$%"', nil,
|
2298
2300
|
|
2299
2301
|
:tSTRING_BEG, "\"", :expr_beg,
|
2300
|
-
:tSTRING_CONTENT,
|
2302
|
+
:tSTRING_CONTENT, '#$%', :expr_beg,
|
2301
2303
|
:tSTRING_END, "\"", :expr_end)
|
2302
2304
|
end
|
2303
2305
|
|
@@ -2641,13 +2643,13 @@ class TestRubyLexer < Minitest::Test
|
|
2641
2643
|
end
|
2642
2644
|
|
2643
2645
|
def test_yylex_hash_colon_quoted_22
|
2644
|
-
|
2646
|
+
setup_lexer_class Ruby22Parser
|
2645
2647
|
|
2646
2648
|
assert_lex("{'a':1}",
|
2647
2649
|
s(:hash, s(:lit, :a), s(:lit, 1)),
|
2648
2650
|
|
2649
2651
|
:tLBRACE, "{", :expr_beg, 0, 1,
|
2650
|
-
:
|
2652
|
+
:tLABEL, "a", :expr_end, 0, 1,
|
2651
2653
|
:tINTEGER, 1, :expr_end, 0, 1,
|
2652
2654
|
:tRCURLY, "}", :expr_endarg, 0, 0)
|
2653
2655
|
end
|
data/test/test_ruby_parser.rb
CHANGED
@@ -121,7 +121,7 @@ module TestRubyParserShared
|
|
121
121
|
rb = "a.b (1) {c}"
|
122
122
|
pt = s(:iter,
|
123
123
|
s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
|
124
|
-
|
124
|
+
0,
|
125
125
|
s(:call, nil, :c))
|
126
126
|
|
127
127
|
assert_parse rb, pt
|
@@ -131,7 +131,7 @@ module TestRubyParserShared
|
|
131
131
|
rb = "a::b (1) {c}"
|
132
132
|
pt = s(:iter,
|
133
133
|
s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
|
134
|
-
|
134
|
+
0,
|
135
135
|
s(:call, nil, :c))
|
136
136
|
|
137
137
|
assert_parse rb, pt
|
@@ -226,7 +226,7 @@ module TestRubyParserShared
|
|
226
226
|
rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend"
|
227
227
|
pt = s(:iter,
|
228
228
|
s(:call, nil, :a),
|
229
|
-
|
229
|
+
0,
|
230
230
|
s(:block,
|
231
231
|
s(:lasgn, :v, s(:nil)),
|
232
232
|
s(:rescue,
|
@@ -942,6 +942,10 @@ module TestRubyParserShared
|
|
942
942
|
Ruby21Parser === self.processor
|
943
943
|
end
|
944
944
|
|
945
|
+
def ruby22
|
946
|
+
Ruby22Parser === self.processor
|
947
|
+
end
|
948
|
+
|
945
949
|
def test_bug_comma
|
946
950
|
val = if ruby18 then
|
947
951
|
s(:lit, 100)
|
@@ -997,7 +1001,7 @@ module TestRubyParserShared
|
|
997
1001
|
rb = "not(a)"
|
998
1002
|
pt = if ruby18 then
|
999
1003
|
s(:not, s(:call, nil, :a))
|
1000
|
-
elsif ruby19 or ruby20 or ruby21 then
|
1004
|
+
elsif ruby19 or ruby20 or ruby21 or ruby22 then
|
1001
1005
|
s(:call, s(:call, nil, :a), :"!")
|
1002
1006
|
else
|
1003
1007
|
raise "wtf"
|
@@ -1008,7 +1012,7 @@ module TestRubyParserShared
|
|
1008
1012
|
|
1009
1013
|
def test_pipe_space
|
1010
1014
|
rb = "a.b do | | end"
|
1011
|
-
pt = s(:iter, s(:call, s(:call, nil, :a), :b),
|
1015
|
+
pt = s(:iter, s(:call, s(:call, nil, :a), :b), s(:args))
|
1012
1016
|
|
1013
1017
|
assert_parse rb, pt
|
1014
1018
|
end
|
@@ -1591,7 +1595,7 @@ module TestRubyParserShared
|
|
1591
1595
|
end
|
1592
1596
|
end
|
1593
1597
|
|
1594
|
-
module
|
1598
|
+
module TestRubyParserShared19to22
|
1595
1599
|
def test_aref_args_lit_assocs
|
1596
1600
|
rb = "[1, 2 => 3]"
|
1597
1601
|
pt = s(:array, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3)))
|
@@ -1610,7 +1614,7 @@ module TestRubyParserShared19to21
|
|
1610
1614
|
rb = "a.b c do end.d"
|
1611
1615
|
pt = s(:call,
|
1612
1616
|
s(:iter,
|
1613
|
-
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)),
|
1617
|
+
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0),
|
1614
1618
|
:d)
|
1615
1619
|
|
1616
1620
|
assert_parse rb, pt
|
@@ -1620,7 +1624,7 @@ module TestRubyParserShared19to21
|
|
1620
1624
|
rb = "a.b c do end::d"
|
1621
1625
|
pt = s(:call,
|
1622
1626
|
s(:iter,
|
1623
|
-
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)),
|
1627
|
+
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0),
|
1624
1628
|
:d)
|
1625
1629
|
|
1626
1630
|
assert_parse rb, pt
|
@@ -1629,7 +1633,7 @@ module TestRubyParserShared19to21
|
|
1629
1633
|
def test_block_command_operation_dot
|
1630
1634
|
rb = "a :b do end.c :d"
|
1631
1635
|
pt = s(:call,
|
1632
|
-
s(:iter, s(:call, nil, :a, s(:lit, :b)),
|
1636
|
+
s(:iter, s(:call, nil, :a, s(:lit, :b)), 0),
|
1633
1637
|
:c,
|
1634
1638
|
s(:lit, :d))
|
1635
1639
|
|
@@ -1639,7 +1643,7 @@ module TestRubyParserShared19to21
|
|
1639
1643
|
def test_block_command_operation_colon
|
1640
1644
|
rb = "a :b do end::c :d"
|
1641
1645
|
pt = s(:call,
|
1642
|
-
s(:iter, s(:call, nil, :a, s(:lit, :b)),
|
1646
|
+
s(:iter, s(:call, nil, :a, s(:lit, :b)), 0),
|
1643
1647
|
:c,
|
1644
1648
|
s(:lit, :d))
|
1645
1649
|
|
@@ -1707,6 +1711,17 @@ module TestRubyParserShared19to21
|
|
1707
1711
|
assert_parse rb, pt
|
1708
1712
|
end
|
1709
1713
|
|
1714
|
+
def test_bug_187
|
1715
|
+
rb = "private def f\na.b do end\nend"
|
1716
|
+
pt = s(:call,
|
1717
|
+
nil,
|
1718
|
+
:private,
|
1719
|
+
s(:defn, :f, s(:args),
|
1720
|
+
s(:iter, s(:call, s(:call, nil, :a), :b), 0)))
|
1721
|
+
|
1722
|
+
assert_parse rb, pt
|
1723
|
+
end
|
1724
|
+
|
1710
1725
|
def test_defn_opt_reg
|
1711
1726
|
rb = "def f(a=nil, b) end"
|
1712
1727
|
pt = s(:defn, :f, s(:args, s(:lasgn, :a, s(:nil)), :b), s(:nil))
|
@@ -2006,7 +2021,7 @@ module TestRubyParserShared19to21
|
|
2006
2021
|
|
2007
2022
|
def test_do_lambda
|
2008
2023
|
rb = "->() do end"
|
2009
|
-
pt = s(:iter, s(:call, nil, :lambda),
|
2024
|
+
pt = s(:iter, s(:call, nil, :lambda), s(:args))
|
2010
2025
|
|
2011
2026
|
assert_parse rb, pt
|
2012
2027
|
end
|
@@ -2129,9 +2144,26 @@ module TestRubyParserShared19to21
|
|
2129
2144
|
|
2130
2145
|
assert_parse rb, pt
|
2131
2146
|
end
|
2147
|
+
|
2148
|
+
def test_multiline_hash_declaration
|
2149
|
+
pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash)))
|
2150
|
+
|
2151
|
+
assert_parse "f(state: {})", pt
|
2152
|
+
assert_parse "f(state: {\n})", pt
|
2153
|
+
assert_parse "f(state:\n {\n})", pt
|
2154
|
+
end
|
2132
2155
|
end
|
2133
2156
|
|
2134
|
-
module
|
2157
|
+
module TestRubyParserShared20to22
|
2158
|
+
def test_defs_kwarg
|
2159
|
+
skip "not yet"
|
2160
|
+
|
2161
|
+
rb = "def self.a b: 1\nend"
|
2162
|
+
pt = s(:defs, s(:self), :a, s(:args, s(:kwarg, :b, s(:lit, 1))), s(:nil))
|
2163
|
+
|
2164
|
+
assert_parse rb, pt
|
2165
|
+
end
|
2166
|
+
|
2135
2167
|
def test_defn_kwarg_kwsplat
|
2136
2168
|
rb = "def a(b: 1, **c) end"
|
2137
2169
|
pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"), s(:nil))
|
@@ -2442,7 +2474,7 @@ end
|
|
2442
2474
|
|
2443
2475
|
class TestRuby19Parser < RubyParserTestCase
|
2444
2476
|
include TestRubyParserShared
|
2445
|
-
include
|
2477
|
+
include TestRubyParserShared19to22
|
2446
2478
|
|
2447
2479
|
def setup
|
2448
2480
|
super
|
@@ -2681,7 +2713,7 @@ class TestRuby19Parser < RubyParserTestCase
|
|
2681
2713
|
s(:lit, :a),
|
2682
2714
|
s(:iter,
|
2683
2715
|
s(:call, nil, :lambda),
|
2684
|
-
|
2716
|
+
0,
|
2685
2717
|
s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))),
|
2686
2718
|
|
2687
2719
|
s(:lit, :e),
|
@@ -2690,12 +2722,14 @@ class TestRuby19Parser < RubyParserTestCase
|
|
2690
2722
|
assert_parse rb, pt
|
2691
2723
|
end
|
2692
2724
|
|
2693
|
-
|
2694
|
-
|
2695
|
-
|
2696
|
-
|
2697
|
-
|
2698
|
-
|
2725
|
+
def test_pipe_semicolon
|
2726
|
+
skip "not yet"
|
2727
|
+
|
2728
|
+
rb = "a.b do | ; c | end"
|
2729
|
+
pt = s(:iter, s(:call, s(:call, nil, :a), :b), 0)
|
2730
|
+
|
2731
|
+
assert_parse rb, pt
|
2732
|
+
end
|
2699
2733
|
|
2700
2734
|
def test_wtf
|
2701
2735
|
# lambda -> f_larglist lambda_body
|
@@ -2799,12 +2833,14 @@ class TestRuby19Parser < RubyParserTestCase
|
|
2799
2833
|
assert_parse rb, pt
|
2800
2834
|
end
|
2801
2835
|
|
2802
|
-
|
2803
|
-
|
2804
|
-
|
2805
|
-
|
2806
|
-
|
2807
|
-
|
2836
|
+
def test_kill_me5
|
2837
|
+
skip "not yet"
|
2838
|
+
|
2839
|
+
rb = "f ->() { g do end }"
|
2840
|
+
pt = 42
|
2841
|
+
|
2842
|
+
assert_parse rb, pt
|
2843
|
+
end
|
2808
2844
|
|
2809
2845
|
def test_iter_args_4
|
2810
2846
|
rb = "f { |a, *b, c| }"
|
@@ -2814,6 +2850,8 @@ class TestRuby19Parser < RubyParserTestCase
|
|
2814
2850
|
end
|
2815
2851
|
|
2816
2852
|
def test_iter_args_5
|
2853
|
+
skip "not yet"
|
2854
|
+
|
2817
2855
|
rb = "f { |a, &b| }"
|
2818
2856
|
pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"&b"))
|
2819
2857
|
|
@@ -3013,13 +3051,21 @@ class TestRuby19Parser < RubyParserTestCase
|
|
3013
3051
|
end
|
3014
3052
|
|
3015
3053
|
def test_lambda_do_vs_brace
|
3016
|
-
pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda),
|
3054
|
+
pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), s(:args)))
|
3017
3055
|
|
3018
3056
|
rb = "f ->() {}"
|
3019
3057
|
assert_parse rb, pt
|
3020
3058
|
|
3021
3059
|
rb = "f ->() do end"
|
3022
3060
|
assert_parse rb, pt
|
3061
|
+
|
3062
|
+
pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), 0))
|
3063
|
+
|
3064
|
+
rb = "f -> {}"
|
3065
|
+
assert_parse rb, pt
|
3066
|
+
|
3067
|
+
rb = "f -> do end"
|
3068
|
+
assert_parse rb, pt
|
3023
3069
|
end
|
3024
3070
|
|
3025
3071
|
def test_thingy
|
@@ -3042,8 +3088,8 @@ end
|
|
3042
3088
|
|
3043
3089
|
class TestRuby20Parser < RubyParserTestCase
|
3044
3090
|
include TestRubyParserShared
|
3045
|
-
include
|
3046
|
-
include
|
3091
|
+
include TestRubyParserShared20to22
|
3092
|
+
include TestRubyParserShared19to22
|
3047
3093
|
|
3048
3094
|
def setup
|
3049
3095
|
super
|
@@ -3057,7 +3103,7 @@ class TestRuby20Parser < RubyParserTestCase
|
|
3057
3103
|
s(:call,
|
3058
3104
|
s(:iter,
|
3059
3105
|
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)),
|
3060
|
-
|
3106
|
+
0,
|
3061
3107
|
s(:call, nil, :d)),
|
3062
3108
|
:e),
|
3063
3109
|
s(:args, :f),
|
@@ -3073,7 +3119,7 @@ class TestRuby20Parser < RubyParserTestCase
|
|
3073
3119
|
s(:call,
|
3074
3120
|
s(:iter,
|
3075
3121
|
s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)),
|
3076
|
-
|
3122
|
+
0,
|
3077
3123
|
s(:call, nil, :d)),
|
3078
3124
|
:e,
|
3079
3125
|
s(:call, nil, :f)),
|
@@ -3213,8 +3259,8 @@ end
|
|
3213
3259
|
|
3214
3260
|
class TestRuby21Parser < RubyParserTestCase
|
3215
3261
|
include TestRubyParserShared
|
3216
|
-
include
|
3217
|
-
include
|
3262
|
+
include TestRubyParserShared19to22
|
3263
|
+
include TestRubyParserShared20to22
|
3218
3264
|
|
3219
3265
|
def setup
|
3220
3266
|
super
|
@@ -3289,3 +3335,75 @@ class TestRuby21Parser < RubyParserTestCase
|
|
3289
3335
|
assert_parse rb, pt
|
3290
3336
|
end
|
3291
3337
|
end
|
3338
|
+
|
3339
|
+
class TestRuby22Parser < RubyParserTestCase
|
3340
|
+
include TestRubyParserShared
|
3341
|
+
include TestRubyParserShared19to22
|
3342
|
+
include TestRubyParserShared20to22
|
3343
|
+
|
3344
|
+
def setup
|
3345
|
+
super
|
3346
|
+
|
3347
|
+
self.processor = Ruby22Parser.new
|
3348
|
+
end
|
3349
|
+
|
3350
|
+
def test_call_args_assoc_quoted
|
3351
|
+
pt = s(:call, nil, :x, s(:hash, s(:lit, :k), s(:lit, 42)))
|
3352
|
+
|
3353
|
+
rb = "x 'k':42"
|
3354
|
+
assert_parse rb, pt
|
3355
|
+
|
3356
|
+
rb = 'x "k":42'
|
3357
|
+
assert_parse rb, pt
|
3358
|
+
|
3359
|
+
rb = 'x "#{k}":42'
|
3360
|
+
pt = s(:call, nil, :x, s(:hash, s(:dsym, "", s(:evstr, s(:call, nil, :k))), s(:lit, 42)))
|
3361
|
+
|
3362
|
+
assert_parse rb, pt
|
3363
|
+
end
|
3364
|
+
|
3365
|
+
def test_bug191
|
3366
|
+
pt = s(:if, s(:call, nil, :a), s(:str, ""), s(:call, nil, :b))
|
3367
|
+
|
3368
|
+
rb = "a ? '': b"
|
3369
|
+
assert_parse rb, pt
|
3370
|
+
|
3371
|
+
rb = "a ? \"\": b"
|
3372
|
+
assert_parse rb, pt
|
3373
|
+
end
|
3374
|
+
end
|
3375
|
+
|
3376
|
+
[18, 19, 20, 21, 22].each do |v|
|
3377
|
+
describe "block args arity #{v}" do
|
3378
|
+
attr_accessor :parser
|
3379
|
+
|
3380
|
+
before do
|
3381
|
+
self.parser = Object.const_get("Ruby#{v}Parser").new
|
3382
|
+
end
|
3383
|
+
|
3384
|
+
{
|
3385
|
+
"-> { }" => s(:iter, s(:call, nil, :lambda), 0),
|
3386
|
+
"lambda { }" => s(:iter, s(:call, nil, :lambda), 0),
|
3387
|
+
"proc { }" => s(:iter, s(:call, nil, :proc), 0),
|
3388
|
+
"Proc.new { }" => s(:iter, s(:call, s(:const, :Proc), :new), 0),
|
3389
|
+
|
3390
|
+
"-> () { }" => s(:iter, s(:call, nil, :lambda), s(:args)),
|
3391
|
+
"lambda { || }" => s(:iter, s(:call, nil, :lambda), s(:args)),
|
3392
|
+
"proc { || }" => s(:iter, s(:call, nil, :proc), s(:args)),
|
3393
|
+
"Proc.new { || }" => s(:iter, s(:call, s(:const, :Proc), :new), s(:args)),
|
3394
|
+
|
3395
|
+
}.each do |input, expected|
|
3396
|
+
next if v == 18 and input =~ /->/
|
3397
|
+
next if v == 19 and input =~ /-> \(\)/
|
3398
|
+
|
3399
|
+
it "parses '#{input}'" do
|
3400
|
+
assert_equal expected, parser.parse(input)
|
3401
|
+
end
|
3402
|
+
|
3403
|
+
input = input.sub(/\{/, "do").sub(/\}/, "end")
|
3404
|
+
it "parses '#{input}'" do
|
3405
|
+
assert_equal expected, parser.parse(input)
|
3406
|
+
end
|
3407
|
+
end
|
3408
|
+
end
|
3409
|
+
end
|