ruby_parser 3.4.1 → 3.5.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 +1 -2
- data.tar.gz.sig +0 -0
- data/.autotest +2 -2
- data/History.txt +20 -0
- data/Manifest.txt +2 -0
- data/Rakefile +24 -81
- data/lib/ruby20_parser.rb +2 -1
- data/lib/ruby20_parser.y +2 -1
- data/lib/ruby21_parser.rb +6726 -0
- data/lib/ruby21_parser.y +2339 -0
- data/lib/ruby_lexer.rb +8 -22
- data/lib/ruby_lexer.rex +83 -95
- data/lib/ruby_lexer.rex.rb +174 -121
- data/lib/ruby_parser.rb +1 -0
- data/lib/ruby_parser_extras.rb +28 -9
- data/test/test_ruby_lexer.rb +23 -0
- data/test/test_ruby_parser.rb +128 -58
- metadata +9 -7
- metadata.gz.sig +3 -3
data/lib/ruby_parser.rb
CHANGED
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.5.0" unless constants.include? "VERSION" # SIGH
|
95
95
|
|
96
96
|
attr_accessor :lexer, :in_def, :in_single, :file
|
97
97
|
attr_reader :env, :comments
|
@@ -240,6 +240,8 @@ module RubyParserStuff
|
|
240
240
|
raise "unhandled: #{arg.sexp_type} in #{args.inspect}"
|
241
241
|
end
|
242
242
|
when Symbol then
|
243
|
+
name = arg.to_s.delete("&*")
|
244
|
+
self.env[name.to_sym] = :lvar unless name.empty?
|
243
245
|
result << arg
|
244
246
|
when ",", "|", ";", "(", ")", nil then
|
245
247
|
# ignore
|
@@ -404,7 +406,7 @@ module RubyParserStuff
|
|
404
406
|
def initialize(options = {})
|
405
407
|
super()
|
406
408
|
|
407
|
-
v = self.class.name[/1[89]|
|
409
|
+
v = self.class.name[/1[89]|2[01]/]
|
408
410
|
|
409
411
|
self.lexer = RubyLexer.new v && v.to_i
|
410
412
|
self.lexer.parser = self
|
@@ -688,6 +690,12 @@ module RubyParserStuff
|
|
688
690
|
result
|
689
691
|
end
|
690
692
|
|
693
|
+
def new_masgn_arg rhs, wrap = false
|
694
|
+
rhs = value_expr(rhs)
|
695
|
+
rhs = s(:to_ary, rhs) if wrap # HACK: could be array if lhs isn't right
|
696
|
+
rhs
|
697
|
+
end
|
698
|
+
|
691
699
|
def new_masgn lhs, rhs, wrap = false
|
692
700
|
rhs = value_expr(rhs)
|
693
701
|
rhs = lhs[1] ? s(:to_ary, rhs) : s(:array, rhs) if wrap
|
@@ -1290,6 +1298,10 @@ module RubyParserStuff
|
|
1290
1298
|
end
|
1291
1299
|
end
|
1292
1300
|
|
1301
|
+
class Ruby21Parser < Racc::Parser
|
1302
|
+
include RubyParserStuff
|
1303
|
+
end
|
1304
|
+
|
1293
1305
|
class Ruby20Parser < Racc::Parser
|
1294
1306
|
include RubyParserStuff
|
1295
1307
|
end
|
@@ -1314,16 +1326,19 @@ class RubyParser
|
|
1314
1326
|
@p18 = Ruby18Parser.new
|
1315
1327
|
@p19 = Ruby19Parser.new
|
1316
1328
|
@p20 = Ruby20Parser.new
|
1329
|
+
@p21 = Ruby21Parser.new
|
1317
1330
|
end
|
1318
1331
|
|
1319
|
-
def process
|
1320
|
-
|
1321
|
-
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1332
|
+
def process s, f = "(string)", t = 10
|
1333
|
+
e = nil
|
1334
|
+
[@p21, @p20, @p19, @p18].each do |parser|
|
1335
|
+
begin
|
1336
|
+
return parser.process s, f, t
|
1337
|
+
rescue Racc::ParseError, RubyParser::SyntaxError => exc
|
1338
|
+
e = exc
|
1339
|
+
end
|
1326
1340
|
end
|
1341
|
+
raise e
|
1327
1342
|
end
|
1328
1343
|
|
1329
1344
|
alias :parse :process
|
@@ -1331,6 +1346,8 @@ class RubyParser
|
|
1331
1346
|
def reset
|
1332
1347
|
@p18.reset
|
1333
1348
|
@p19.reset
|
1349
|
+
@p20.reset
|
1350
|
+
@p21.reset
|
1334
1351
|
end
|
1335
1352
|
|
1336
1353
|
def self.for_current_ruby
|
@@ -1341,6 +1358,8 @@ class RubyParser
|
|
1341
1358
|
Ruby19Parser.new
|
1342
1359
|
when /^2.0/ then
|
1343
1360
|
Ruby20Parser.new
|
1361
|
+
when /^2.1/ then
|
1362
|
+
Ruby21Parser.new
|
1344
1363
|
else
|
1345
1364
|
raise "unrecognized RUBY_VERSION #{RUBY_VERSION}"
|
1346
1365
|
end
|
data/test/test_ruby_lexer.rb
CHANGED
@@ -2611,4 +2611,27 @@ class TestRubyLexer < Minitest::Test
|
|
2611
2611
|
:tSTRING_END, nil, :expr_end, 0, 0)
|
2612
2612
|
end
|
2613
2613
|
end
|
2614
|
+
|
2615
|
+
def test_ruby21_new_numbers
|
2616
|
+
skip "Don't have imaginary and rational literal lexing yet"
|
2617
|
+
|
2618
|
+
setup_lexer_class Ruby21Parser
|
2619
|
+
|
2620
|
+
assert_lex3("10r", nil, :tRATIONAL, "10r", :expr_end)
|
2621
|
+
assert_lex3("1.5r", nil, :tRATIONAL, "1.5r", :expr_end)
|
2622
|
+
|
2623
|
+
assert_lex3("1i", nil, :tIMAGINARY, "1i", :expr_end)
|
2624
|
+
assert_lex3("1+2i", nil, :tIMAGINARY, "1+2i", :expr_end)
|
2625
|
+
assert_lex3("1.2+3.4i", nil, :tIMAGINARY, "1.2+3.4i", :expr_end)
|
2626
|
+
assert_lex3("4r+3i", nil, :tIMAGINARY, "4r+3i", :expr_end)
|
2627
|
+
assert_lex3("4r+3ri", nil, :tIMAGINARY, "4r+3i", :expr_end)
|
2628
|
+
|
2629
|
+
assert_lex3("4i+3r", nil, :tIMAGINARY, "4r+3i", :expr_end) # HACK
|
2630
|
+
assert_lex3("1i+2ri", nil, :tIMAGINARY, "4r+3i", :expr_end) # HACK
|
2631
|
+
|
2632
|
+
assert_lex3("1+2ri", nil, :tIMAGINARY, "1+3ri", :expr_end)
|
2633
|
+
refute_lex("1+2ir", :tINTEGER, 1)
|
2634
|
+
|
2635
|
+
flunk
|
2636
|
+
end
|
2614
2637
|
end
|
data/test/test_ruby_parser.rb
CHANGED
@@ -720,6 +720,18 @@ module TestRubyParserShared
|
|
720
720
|
assert_parse rb, pt
|
721
721
|
end
|
722
722
|
|
723
|
+
def test_parse_line_heredoc_evstr
|
724
|
+
skip "heredoc line numbers are just gonna be screwed for a while..."
|
725
|
+
|
726
|
+
rb = "<<-A\na\n\#{b}\nA"
|
727
|
+
pt = s(:dstr, "a\n",
|
728
|
+
s(:evstr,
|
729
|
+
s(:call, nil, :b).line(3)),
|
730
|
+
s(:str, "\n")).line(1)
|
731
|
+
|
732
|
+
assert_parse rb, pt
|
733
|
+
end
|
734
|
+
|
723
735
|
def test_parse_line_iter_call_parens
|
724
736
|
rb = "f(a) do |x, y|\n x + y\nend"
|
725
737
|
|
@@ -874,13 +886,15 @@ module TestRubyParserShared
|
|
874
886
|
Ruby20Parser === self.processor
|
875
887
|
end
|
876
888
|
|
889
|
+
def ruby21
|
890
|
+
Ruby21Parser === self.processor
|
891
|
+
end
|
892
|
+
|
877
893
|
def test_bug_comma
|
878
894
|
val = if ruby18 then
|
879
895
|
s(:lit, 100)
|
880
|
-
elsif ruby19 or ruby20 then
|
881
|
-
s(:str, "d")
|
882
896
|
else
|
883
|
-
|
897
|
+
s(:str, "d")
|
884
898
|
end
|
885
899
|
|
886
900
|
rb = "if test ?d, dir then end"
|
@@ -931,7 +945,7 @@ module TestRubyParserShared
|
|
931
945
|
rb = "not(a)"
|
932
946
|
pt = if ruby18 then
|
933
947
|
s(:not, s(:call, nil, :a))
|
934
|
-
elsif ruby19 or ruby20 then
|
948
|
+
elsif ruby19 or ruby20 or ruby21 then
|
935
949
|
s(:call, s(:call, nil, :a), :"!")
|
936
950
|
else
|
937
951
|
raise "wtf"
|
@@ -1333,15 +1347,6 @@ module TestRubyParserShared
|
|
1333
1347
|
assert_parse rb, pt
|
1334
1348
|
end
|
1335
1349
|
|
1336
|
-
def test_aref_args_lit_assocs
|
1337
|
-
skip if ruby18
|
1338
|
-
|
1339
|
-
rb = "[1, 2 => 3]"
|
1340
|
-
pt = s(:array, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3)))
|
1341
|
-
|
1342
|
-
assert_parse rb, pt
|
1343
|
-
end
|
1344
|
-
|
1345
1350
|
def test_BEGIN
|
1346
1351
|
rb = "BEGIN { 42 }"
|
1347
1352
|
pt = s(:iter, s(:preexe), s(:args), s(:lit, 42))
|
@@ -1402,15 +1407,6 @@ module TestRubyParserShared
|
|
1402
1407
|
assert_parse rb, pt
|
1403
1408
|
end
|
1404
1409
|
|
1405
|
-
def test_block_decomp_arg_splat
|
1406
|
-
skip "not that smart yet" if ruby18 # HACK
|
1407
|
-
|
1408
|
-
rb = "a { |(b, *)| }"
|
1409
|
-
pt = s(:iter, s(:call, nil, :a), s(:args, s(:masgn, :b, :*)))
|
1410
|
-
|
1411
|
-
assert_parse rb, pt
|
1412
|
-
end
|
1413
|
-
|
1414
1410
|
def test_masgn_arg_ident
|
1415
1411
|
rb = "a, b.C = d"
|
1416
1412
|
pt = s(:masgn,
|
@@ -1543,7 +1539,21 @@ module TestRubyParserShared
|
|
1543
1539
|
end
|
1544
1540
|
end
|
1545
1541
|
|
1546
|
-
module
|
1542
|
+
module TestRubyParserShared19to21
|
1543
|
+
def test_aref_args_lit_assocs
|
1544
|
+
rb = "[1, 2 => 3]"
|
1545
|
+
pt = s(:array, s(:lit, 1), s(:hash, s(:lit, 2), s(:lit, 3)))
|
1546
|
+
|
1547
|
+
assert_parse rb, pt
|
1548
|
+
end
|
1549
|
+
|
1550
|
+
def test_block_decomp_arg_splat
|
1551
|
+
rb = "a { |(b, *)| }"
|
1552
|
+
pt = s(:iter, s(:call, nil, :a), s(:args, s(:masgn, :b, :*)))
|
1553
|
+
|
1554
|
+
assert_parse rb, pt
|
1555
|
+
end
|
1556
|
+
|
1547
1557
|
def test_block_call_operation_dot
|
1548
1558
|
rb = "a.b c do end.d"
|
1549
1559
|
pt = s(:call,
|
@@ -2015,9 +2025,8 @@ module TestRubyParserShared1920
|
|
2015
2025
|
end
|
2016
2026
|
|
2017
2027
|
def test_mlhs_keyword
|
2018
|
-
skip "Breaks on 1.9 and 2.0 parser but valid" # HACK
|
2019
2028
|
rb = "a.!=(true, true)"
|
2020
|
-
pt =
|
2029
|
+
pt = s(:call, s(:call, nil, :a), :"!=", s(:true), s(:true))
|
2021
2030
|
|
2022
2031
|
assert_parse rb, pt
|
2023
2032
|
end
|
@@ -2030,6 +2039,70 @@ module TestRubyParserShared1920
|
|
2030
2039
|
end
|
2031
2040
|
end
|
2032
2041
|
|
2042
|
+
module TestRubyParserShared20to21
|
2043
|
+
def test_defn_kwarg_kwsplat
|
2044
|
+
rb = "def a(b: 1, **c) end"
|
2045
|
+
pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"), s(:nil))
|
2046
|
+
|
2047
|
+
assert_parse rb, pt
|
2048
|
+
end
|
2049
|
+
|
2050
|
+
def test_defn_kwarg_env
|
2051
|
+
rb = "def test(**testing) test_splat(**testing) end"
|
2052
|
+
pt = s(:defn, :test, s(:args, :"**testing"),
|
2053
|
+
s(:call, nil, :test_splat, s(:kwsplat, s(:lvar, :testing))))
|
2054
|
+
|
2055
|
+
assert_parse rb, pt
|
2056
|
+
end
|
2057
|
+
|
2058
|
+
def test_call_arg_kwsplat
|
2059
|
+
rb = "a(b, **1)"
|
2060
|
+
pt = s(:call, nil, :a, s(:call, nil, :b), s(:kwsplat, s(:lit, 1)))
|
2061
|
+
|
2062
|
+
assert_parse rb, pt
|
2063
|
+
end
|
2064
|
+
|
2065
|
+
def test_call_kwsplat
|
2066
|
+
rb = "a(**1)"
|
2067
|
+
pt = s(:call, nil, :a, s(:kwsplat, s(:lit, 1)))
|
2068
|
+
|
2069
|
+
assert_parse rb, pt
|
2070
|
+
end
|
2071
|
+
|
2072
|
+
def test_iter_kwarg
|
2073
|
+
rb = "a { |b: 1| }"
|
2074
|
+
pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1))))
|
2075
|
+
|
2076
|
+
assert_parse rb, pt
|
2077
|
+
end
|
2078
|
+
|
2079
|
+
def test_iter_kwarg_kwsplat
|
2080
|
+
rb = "a { |b: 1, **c| }"
|
2081
|
+
pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"))
|
2082
|
+
|
2083
|
+
assert_parse rb, pt
|
2084
|
+
end
|
2085
|
+
|
2086
|
+
def test_block_kwarg_lvar
|
2087
|
+
rb = "bl { |kw: :val| kw }"
|
2088
|
+
pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val))),
|
2089
|
+
s(:lvar, :kw))
|
2090
|
+
|
2091
|
+
assert_parse rb, pt
|
2092
|
+
end
|
2093
|
+
|
2094
|
+
def test_block_kwarg_lvar_multiple
|
2095
|
+
rb = "bl { |kw: :val, kw2: :val2 | kw }"
|
2096
|
+
pt = s(:iter, s(:call, nil, :bl),
|
2097
|
+
s(:args,
|
2098
|
+
s(:kwarg, :kw, s(:lit, :val)),
|
2099
|
+
s(:kwarg, :kw2, s(:lit, :val2))),
|
2100
|
+
s(:lvar, :kw))
|
2101
|
+
|
2102
|
+
assert_parse rb, pt
|
2103
|
+
end
|
2104
|
+
end
|
2105
|
+
|
2033
2106
|
class TestRubyParser < Minitest::Test
|
2034
2107
|
def test_parse
|
2035
2108
|
processor = RubyParser.new
|
@@ -2268,7 +2341,7 @@ end
|
|
2268
2341
|
|
2269
2342
|
class TestRuby19Parser < RubyParserTestCase
|
2270
2343
|
include TestRubyParserShared
|
2271
|
-
include
|
2344
|
+
include TestRubyParserShared19to21
|
2272
2345
|
|
2273
2346
|
def setup
|
2274
2347
|
super
|
@@ -2868,7 +2941,8 @@ end
|
|
2868
2941
|
|
2869
2942
|
class TestRuby20Parser < RubyParserTestCase
|
2870
2943
|
include TestRubyParserShared
|
2871
|
-
include
|
2944
|
+
include TestRubyParserShared20to21
|
2945
|
+
include TestRubyParserShared19to21
|
2872
2946
|
|
2873
2947
|
def setup
|
2874
2948
|
super
|
@@ -2946,14 +3020,6 @@ class TestRuby20Parser < RubyParserTestCase
|
|
2946
3020
|
assert_parse rb, pt
|
2947
3021
|
end
|
2948
3022
|
|
2949
|
-
def test_block_kwarg_lvar
|
2950
|
-
rb = "bl { |kw: :val| kw }"
|
2951
|
-
pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val))),
|
2952
|
-
s(:lvar, :kw))
|
2953
|
-
|
2954
|
-
assert_parse rb, pt
|
2955
|
-
end
|
2956
|
-
|
2957
3023
|
def test_defn_powarg
|
2958
3024
|
rb = "def f(**opts) end"
|
2959
3025
|
pt = s(:defn, :f, s(:args, :"**opts"), s(:nil))
|
@@ -3027,54 +3093,58 @@ class TestRuby20Parser < RubyParserTestCase
|
|
3027
3093
|
assert_parse rb, pt
|
3028
3094
|
end
|
3029
3095
|
|
3030
|
-
def test_defn_unary_not
|
3031
|
-
skip "Not yet"
|
3096
|
+
def test_defn_unary_not
|
3032
3097
|
rb = "def !@; true; end" # I seriously HATE this
|
3033
3098
|
pt = s(:defn, :"!@", s(:args), s(:true))
|
3034
3099
|
|
3035
3100
|
assert_parse rb, pt
|
3036
3101
|
end
|
3037
3102
|
|
3038
|
-
def
|
3039
|
-
rb = "
|
3040
|
-
pt = s(:
|
3103
|
+
def test_iter_array_curly
|
3104
|
+
rb = "f :a, [:b] { |c, d| }" # yes, this is bad code... that's their problem
|
3105
|
+
pt = s(:iter,
|
3106
|
+
s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))),
|
3107
|
+
s(:args, :c, :d))
|
3041
3108
|
|
3042
3109
|
assert_parse rb, pt
|
3043
3110
|
end
|
3111
|
+
end
|
3044
3112
|
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3113
|
+
class TestRuby21Parser < RubyParserTestCase
|
3114
|
+
include TestRubyParserShared
|
3115
|
+
include TestRubyParserShared19to21
|
3116
|
+
include TestRubyParserShared20to21
|
3048
3117
|
|
3049
|
-
|
3118
|
+
def setup
|
3119
|
+
super
|
3120
|
+
|
3121
|
+
self.processor = Ruby21Parser.new
|
3050
3122
|
end
|
3051
3123
|
|
3052
|
-
def
|
3053
|
-
rb = "
|
3054
|
-
pt = s(:
|
3124
|
+
def test_f_kw
|
3125
|
+
rb = "def x k:42; end"
|
3126
|
+
pt = s(:defn, :x, s(:args, s(:kwarg, :k, s(:lit, 42))), s(:nil))
|
3055
3127
|
|
3056
3128
|
assert_parse rb, pt
|
3057
3129
|
end
|
3058
3130
|
|
3059
|
-
def
|
3060
|
-
rb = "
|
3061
|
-
pt = s(:
|
3131
|
+
def test_f_kw__required
|
3132
|
+
rb = "def x k:; end"
|
3133
|
+
pt = s(:defn, :x, s(:args, s(:kwarg, :k)), s(:nil))
|
3062
3134
|
|
3063
3135
|
assert_parse rb, pt
|
3064
3136
|
end
|
3065
3137
|
|
3066
|
-
def
|
3067
|
-
rb = "
|
3068
|
-
pt = s(:iter, s(:call, nil, :
|
3138
|
+
def test_block_kw
|
3139
|
+
rb = "-> (k:42) { }"
|
3140
|
+
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k, s(:lit, 42))))
|
3069
3141
|
|
3070
3142
|
assert_parse rb, pt
|
3071
3143
|
end
|
3072
3144
|
|
3073
|
-
def
|
3074
|
-
rb = "
|
3075
|
-
pt = s(:iter,
|
3076
|
-
s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))),
|
3077
|
-
s(:args, :c, :d))
|
3145
|
+
def test_block_kw__required
|
3146
|
+
rb = "-> (k:) { }"
|
3147
|
+
pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k)))
|
3078
3148
|
|
3079
3149
|
assert_parse rb, pt
|
3080
3150
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
Y4evBVezr3SjXz08vPqRO5YRdO3zfeMT8gBjRqZjWJGMZ2lD4XNfrs7eky74CyZw
|
30
30
|
xx3n58i0lQkBE1EpKE0lFu/y
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2014-
|
32
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: sexp_processor
|
@@ -51,14 +51,14 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '5.
|
54
|
+
version: '5.3'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '5.
|
61
|
+
version: '5.3'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: rdoc
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -121,14 +121,14 @@ dependencies:
|
|
121
121
|
requirements:
|
122
122
|
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '3.
|
124
|
+
version: '3.10'
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '3.
|
131
|
+
version: '3.10'
|
132
132
|
description: |-
|
133
133
|
ruby_parser (RP) is a ruby parser written in pure ruby (utilizing
|
134
134
|
racc--which does by default use a C extension). RP's output is
|
@@ -182,6 +182,8 @@ files:
|
|
182
182
|
- lib/ruby19_parser.y
|
183
183
|
- lib/ruby20_parser.rb
|
184
184
|
- lib/ruby20_parser.y
|
185
|
+
- lib/ruby21_parser.rb
|
186
|
+
- lib/ruby21_parser.y
|
185
187
|
- lib/ruby_lexer.rb
|
186
188
|
- lib/ruby_lexer.rex
|
187
189
|
- lib/ruby_lexer.rex.rb
|
@@ -211,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
213
|
- !ruby/object:Gem::Version
|
212
214
|
version: '0'
|
213
215
|
requirements: []
|
214
|
-
rubyforge_project:
|
216
|
+
rubyforge_project:
|
215
217
|
rubygems_version: 2.2.1
|
216
218
|
signing_key:
|
217
219
|
specification_version: 4
|