parser 2.5.0.5 → 2.5.1.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
- data/.gitignore +1 -0
- data/CHANGELOG.md +18 -0
- data/Rakefile +1 -0
- data/lib/parser/all.rb +1 -0
- data/lib/parser/builders/default.rb +1 -1
- data/lib/parser/context.rb +9 -0
- data/lib/parser/current.rb +13 -4
- data/lib/parser/lexer.rl +61 -19
- data/lib/parser/lexer/dedenter.rb +31 -3
- data/lib/parser/lexer/literal.rb +8 -0
- data/lib/parser/macruby.y +2 -2
- data/lib/parser/ruby18.y +2 -2
- data/lib/parser/ruby19.y +2 -2
- data/lib/parser/ruby20.y +2 -2
- data/lib/parser/ruby21.y +2 -2
- data/lib/parser/ruby22.y +2 -2
- data/lib/parser/ruby23.y +2 -2
- data/lib/parser/ruby24.y +20 -22
- data/lib/parser/ruby25.y +28 -30
- data/lib/parser/ruby26.y +2392 -0
- data/lib/parser/rubymotion.y +2 -2
- data/lib/parser/runner.rb +5 -0
- data/lib/parser/version.rb +1 -1
- data/parser.gemspec +1 -0
- data/test/helper.rb +13 -2
- data/test/parse_helper.rb +2 -1
- data/test/test_current.rb +2 -0
- data/test/test_lexer.rb +38 -2
- data/test/test_parser.rb +133 -10
- metadata +4 -2
data/lib/parser/rubymotion.y
CHANGED
@@ -1104,7 +1104,7 @@ rule
|
|
1104
1104
|
}
|
1105
1105
|
bodystmt kEND
|
1106
1106
|
{
|
1107
|
-
|
1107
|
+
unless @context.class_definition_allowed?
|
1108
1108
|
diagnostic :error, :class_in_def, nil, val[0]
|
1109
1109
|
end
|
1110
1110
|
|
@@ -1139,7 +1139,7 @@ rule
|
|
1139
1139
|
}
|
1140
1140
|
bodystmt kEND
|
1141
1141
|
{
|
1142
|
-
|
1142
|
+
unless @context.module_definition_allowed?
|
1143
1143
|
diagnostic :error, :module_in_def, nil, val[0]
|
1144
1144
|
end
|
1145
1145
|
|
data/lib/parser/runner.rb
CHANGED
@@ -101,6 +101,11 @@ module Parser
|
|
101
101
|
@parser_class = Parser::Ruby25
|
102
102
|
end
|
103
103
|
|
104
|
+
opts.on '--26', 'Parse as Ruby 2.6 would' do
|
105
|
+
require 'parser/ruby26'
|
106
|
+
@parser_class = Parser::Ruby26
|
107
|
+
end
|
108
|
+
|
104
109
|
opts.on '--mac', 'Parse as MacRuby 0.12 would' do
|
105
110
|
require 'parser/macruby'
|
106
111
|
@parser_class = Parser::MacRuby
|
data/lib/parser/version.rb
CHANGED
data/parser.gemspec
CHANGED
data/test/helper.rb
CHANGED
@@ -8,8 +8,19 @@ require 'simplecov'
|
|
8
8
|
if ENV.include?('COVERAGE') && SimpleCov.usable?
|
9
9
|
require_relative 'racc_coverage_helper'
|
10
10
|
|
11
|
-
RaccCoverage.start(
|
12
|
-
|
11
|
+
RaccCoverage.start(
|
12
|
+
%w(
|
13
|
+
ruby18.y
|
14
|
+
ruby19.y
|
15
|
+
ruby20.y
|
16
|
+
ruby21.y
|
17
|
+
ruby22.y
|
18
|
+
ruby23.y
|
19
|
+
ruby24.y
|
20
|
+
ruby25.y
|
21
|
+
ruby26.y
|
22
|
+
),
|
23
|
+
File.expand_path('../../lib/parser', __FILE__))
|
13
24
|
|
14
25
|
# Report results faster.
|
15
26
|
at_exit { RaccCoverage.stop }
|
data/test/parse_helper.rb
CHANGED
@@ -7,7 +7,7 @@ module ParseHelper
|
|
7
7
|
require 'parser/macruby'
|
8
8
|
require 'parser/rubymotion'
|
9
9
|
|
10
|
-
ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 mac ios)
|
10
|
+
ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 mac ios)
|
11
11
|
|
12
12
|
def setup
|
13
13
|
@diagnostics = []
|
@@ -25,6 +25,7 @@ module ParseHelper
|
|
25
25
|
when '2.3' then parser = Parser::Ruby23.new
|
26
26
|
when '2.4' then parser = Parser::Ruby24.new
|
27
27
|
when '2.5' then parser = Parser::Ruby25.new
|
28
|
+
when '2.6' then parser = Parser::Ruby26.new
|
28
29
|
when 'mac' then parser = Parser::MacRuby.new
|
29
30
|
when 'ios' then parser = Parser::RubyMotion.new
|
30
31
|
else raise "Unrecognized Ruby version #{version}"
|
data/test/test_current.rb
CHANGED
@@ -18,6 +18,8 @@ class TestCurrent < Minitest::Test
|
|
18
18
|
assert_equal Parser::Ruby24, Parser::CurrentRuby
|
19
19
|
when /^2\.5\.\d+/
|
20
20
|
assert_equal Parser::Ruby25, Parser::CurrentRuby
|
21
|
+
when /^2\.6\.\d+/
|
22
|
+
assert_equal Parser::Ruby26, Parser::CurrentRuby
|
21
23
|
else
|
22
24
|
flunk "Update test_current for #{RUBY_VERSION}"
|
23
25
|
end
|
data/test/test_lexer.rb
CHANGED
@@ -1944,7 +1944,7 @@ class TestLexer < Minitest::Test
|
|
1944
1944
|
:tIDENTIFIER, "a", [0, 1],
|
1945
1945
|
:tSTAR2, "*", [2, 3])
|
1946
1946
|
|
1947
|
-
assert_equal :
|
1947
|
+
assert_equal :expr_value, @lex.state
|
1948
1948
|
end
|
1949
1949
|
|
1950
1950
|
def test_star2
|
@@ -1952,7 +1952,7 @@ class TestLexer < Minitest::Test
|
|
1952
1952
|
:tIDENTIFIER, "a", [0, 1],
|
1953
1953
|
:tPOW, "**", [2, 4])
|
1954
1954
|
|
1955
|
-
assert_equal :
|
1955
|
+
assert_equal :expr_value, @lex.state
|
1956
1956
|
end
|
1957
1957
|
|
1958
1958
|
def test_star2_equals
|
@@ -3498,4 +3498,40 @@ class TestLexer < Minitest::Test
|
|
3498
3498
|
:tIDENTIFIER, 'cond', [11, 15])
|
3499
3499
|
end
|
3500
3500
|
|
3501
|
+
def test_parser_bug_486
|
3502
|
+
setup_lexer(19)
|
3503
|
+
assert_scanned(':!@',
|
3504
|
+
:tSYMBOL, '!', [0, 3])
|
3505
|
+
|
3506
|
+
setup_lexer(19)
|
3507
|
+
assert_scanned(':~@',
|
3508
|
+
:tSYMBOL, '~', [0, 3])
|
3509
|
+
end
|
3510
|
+
|
3511
|
+
def test_slash_only_in_heredocs
|
3512
|
+
setup_lexer(23)
|
3513
|
+
refute_scanned(%Q{<<~E\n\\\nE})
|
3514
|
+
|
3515
|
+
setup_lexer(23)
|
3516
|
+
refute_scanned(%Q{<<-E\n\\\nE})
|
3517
|
+
end
|
3518
|
+
|
3519
|
+
def test_escapes_in_squiggly_heredoc
|
3520
|
+
setup_lexer(23)
|
3521
|
+
|
3522
|
+
assert_scanned(%Q{<<~E\n\a\b\e\f\r\t\\\v\nE},
|
3523
|
+
:tSTRING_BEG, '<<"', [0, 4],
|
3524
|
+
:tSTRING_CONTENT, "\a\b\e\f\r\t\v\n", [5, 14],
|
3525
|
+
:tSTRING_END, 'E', [14, 15],
|
3526
|
+
:tNL, nil, [4, 5])
|
3527
|
+
|
3528
|
+
setup_lexer(23)
|
3529
|
+
|
3530
|
+
assert_scanned(%Q{<<-E\n\a\b\e\f\r\t\\\v\nE},
|
3531
|
+
:tSTRING_BEG, '<<"', [0, 4],
|
3532
|
+
:tSTRING_CONTENT, "\a\b\e\f\r\t\v\n", [5, 14],
|
3533
|
+
:tSTRING_END, 'E', [14, 15],
|
3534
|
+
:tNL, nil, [4, 5])
|
3535
|
+
end
|
3536
|
+
|
3501
3537
|
end
|
data/test/test_parser.rb
CHANGED
@@ -27,6 +27,7 @@ class TestParser < Minitest::Test
|
|
27
27
|
SINCE_2_3 = SINCE_2_2 - %w(2.2)
|
28
28
|
SINCE_2_4 = SINCE_2_3 - %w(2.3)
|
29
29
|
SINCE_2_5 = SINCE_2_4 - %w(2.4)
|
30
|
+
SINCE_2_6 = SINCE_2_5 - %w(2.5)
|
30
31
|
|
31
32
|
# Guidelines for test naming:
|
32
33
|
# * Test structure follows structure of AST_FORMAT.md.
|
@@ -3915,7 +3916,8 @@ class TestParser < Minitest::Test
|
|
3915
3916
|
s(:args),
|
3916
3917
|
s(:int, 1)),
|
3917
3918
|
%q{f 1, {1 => 2} {1}},
|
3918
|
-
%q{}
|
3919
|
+
%q{},
|
3920
|
+
ALL_VERSIONS - SINCE_2_5)
|
3919
3921
|
end
|
3920
3922
|
|
3921
3923
|
def test_space_args_arg_call
|
@@ -4940,7 +4942,8 @@ class TestParser < Minitest::Test
|
|
4940
4942
|
s(:begin,
|
4941
4943
|
s(:int, 2))),
|
4942
4944
|
%q{begin; else; 2; end},
|
4943
|
-
%q{ ~~~~ begin (begin)}
|
4945
|
+
%q{ ~~~~ begin (begin)},
|
4946
|
+
ALL_VERSIONS - SINCE_2_6)
|
4944
4947
|
|
4945
4948
|
assert_parses(
|
4946
4949
|
s(:kwbegin,
|
@@ -4948,7 +4951,8 @@ class TestParser < Minitest::Test
|
|
4948
4951
|
s(:begin,
|
4949
4952
|
s(:int, 2))),
|
4950
4953
|
%q{begin; 1; else; 2; end},
|
4951
|
-
%q{ ~~~~ begin (begin)}
|
4954
|
+
%q{ ~~~~ begin (begin)},
|
4955
|
+
ALL_VERSIONS - SINCE_2_6)
|
4952
4956
|
|
4953
4957
|
assert_parses(
|
4954
4958
|
s(:kwbegin,
|
@@ -4957,12 +4961,20 @@ class TestParser < Minitest::Test
|
|
4957
4961
|
s(:begin,
|
4958
4962
|
s(:int, 3))),
|
4959
4963
|
%q{begin; 1; 2; else; 3; end},
|
4960
|
-
%q{ ~~~~ begin (begin)}
|
4964
|
+
%q{ ~~~~ begin (begin)},
|
4965
|
+
ALL_VERSIONS - SINCE_2_6)
|
4961
4966
|
|
4962
4967
|
assert_diagnoses(
|
4963
4968
|
[:warning, :useless_else],
|
4964
4969
|
%q{begin; 1; else; 2; end},
|
4965
|
-
%q{ ~~~~ location}
|
4970
|
+
%q{ ~~~~ location},
|
4971
|
+
ALL_VERSIONS - SINCE_2_6)
|
4972
|
+
|
4973
|
+
assert_diagnoses(
|
4974
|
+
[:error, :useless_else],
|
4975
|
+
%q{begin; 1; else; 2; end},
|
4976
|
+
%q{ ~~~~ location},
|
4977
|
+
SINCE_2_6)
|
4966
4978
|
end
|
4967
4979
|
|
4968
4980
|
def test_ensure
|
@@ -6416,9 +6428,9 @@ class TestParser < Minitest::Test
|
|
6416
6428
|
|
6417
6429
|
def test_context_cmd_brace_block
|
6418
6430
|
[
|
6419
|
-
'tap
|
6420
|
-
'foo.tap
|
6421
|
-
'foo::tap
|
6431
|
+
'tap foo {',
|
6432
|
+
'foo.tap foo {',
|
6433
|
+
'foo::tap foo {'
|
6422
6434
|
].each do |code|
|
6423
6435
|
assert_context([:block], code, ALL_VERSIONS)
|
6424
6436
|
end
|
@@ -6736,7 +6748,7 @@ class TestParser < Minitest::Test
|
|
6736
6748
|
[:error, :unexpected_token, { :token => 'tLCURLY' }],
|
6737
6749
|
%q{m [] {}},
|
6738
6750
|
%q{ ^ location},
|
6739
|
-
|
6751
|
+
SINCE_2_5)
|
6740
6752
|
|
6741
6753
|
assert_parses(
|
6742
6754
|
s(:block,
|
@@ -6745,7 +6757,7 @@ class TestParser < Minitest::Test
|
|
6745
6757
|
s(:args), nil),
|
6746
6758
|
%q{meth[] {}},
|
6747
6759
|
%q{},
|
6748
|
-
|
6760
|
+
SINCE_2_5
|
6749
6761
|
)
|
6750
6762
|
|
6751
6763
|
assert_diagnoses_many(
|
@@ -6842,4 +6854,115 @@ class TestParser < Minitest::Test
|
|
6842
6854
|
%q{},
|
6843
6855
|
ALL_VERSIONS)
|
6844
6856
|
end
|
6857
|
+
|
6858
|
+
def test_bug_480
|
6859
|
+
assert_parses(
|
6860
|
+
s(:send, nil, :m,
|
6861
|
+
s(:dstr,
|
6862
|
+
s(:begin),
|
6863
|
+
s(:begin,
|
6864
|
+
s(:begin)))),
|
6865
|
+
%q{m "#{}#{()}"},
|
6866
|
+
%q{},
|
6867
|
+
ALL_VERSIONS)
|
6868
|
+
end
|
6869
|
+
|
6870
|
+
def test_bug_481
|
6871
|
+
assert_parses(
|
6872
|
+
s(:begin,
|
6873
|
+
s(:send, nil, :m,
|
6874
|
+
s(:def, :x,
|
6875
|
+
s(:args), nil)),
|
6876
|
+
s(:block,
|
6877
|
+
s(:send,
|
6878
|
+
s(:int, 1), :tap),
|
6879
|
+
s(:args), nil)),
|
6880
|
+
%q{m def x(); end; 1.tap do end},
|
6881
|
+
%q{},
|
6882
|
+
ALL_VERSIONS)
|
6883
|
+
end
|
6884
|
+
|
6885
|
+
def test_parser_bug_490
|
6886
|
+
assert_parses(
|
6887
|
+
s(:def, :m,
|
6888
|
+
s(:args),
|
6889
|
+
s(:sclass,
|
6890
|
+
s(:self),
|
6891
|
+
s(:class,
|
6892
|
+
s(:const, nil, :C), nil, nil))),
|
6893
|
+
%q{def m; class << self; class C; end; end; end},
|
6894
|
+
%q{},
|
6895
|
+
ALL_VERSIONS)
|
6896
|
+
|
6897
|
+
assert_parses(
|
6898
|
+
s(:def, :m,
|
6899
|
+
s(:args),
|
6900
|
+
s(:sclass,
|
6901
|
+
s(:self),
|
6902
|
+
s(:module,
|
6903
|
+
s(:const, nil, :M), nil))),
|
6904
|
+
%q{def m; class << self; module M; end; end; end},
|
6905
|
+
%q{},
|
6906
|
+
ALL_VERSIONS)
|
6907
|
+
|
6908
|
+
assert_parses(
|
6909
|
+
s(:def, :m,
|
6910
|
+
s(:args),
|
6911
|
+
s(:sclass,
|
6912
|
+
s(:self),
|
6913
|
+
s(:casgn, nil, :A,
|
6914
|
+
s(:nil)))),
|
6915
|
+
%q{def m; class << self; A = nil; end; end},
|
6916
|
+
%q{},
|
6917
|
+
ALL_VERSIONS)
|
6918
|
+
end
|
6919
|
+
|
6920
|
+
def test_slash_newline_in_heredocs
|
6921
|
+
assert_parses(
|
6922
|
+
s(:dstr,
|
6923
|
+
s(:str, "1 2\n"),
|
6924
|
+
s(:str, "3\n")),
|
6925
|
+
%Q{<<~E\n 1 \\\n 2\n 3\nE\n},
|
6926
|
+
%q{},
|
6927
|
+
SINCE_2_3)
|
6928
|
+
|
6929
|
+
assert_parses(
|
6930
|
+
s(:dstr,
|
6931
|
+
s(:str, " 1 2\n"),
|
6932
|
+
s(:str, " 3\n")),
|
6933
|
+
%Q{<<-E\n 1 \\\n 2\n 3\nE\n},
|
6934
|
+
%q{},
|
6935
|
+
ALL_VERSIONS)
|
6936
|
+
end
|
6937
|
+
|
6938
|
+
def test_ambiuous_quoted_label_in_ternary_operator
|
6939
|
+
assert_parses(
|
6940
|
+
s(:if,
|
6941
|
+
s(:send, nil, :a),
|
6942
|
+
s(:send,
|
6943
|
+
s(:send, nil, :b), :&,
|
6944
|
+
s(:str, '')),
|
6945
|
+
s(:nil)),
|
6946
|
+
%q{a ? b & '': nil},
|
6947
|
+
%q{},
|
6948
|
+
ALL_VERSIONS)
|
6949
|
+
|
6950
|
+
assert_diagnoses(
|
6951
|
+
[:error, :unexpected_token, { :token => 'tLABEL_END' }],
|
6952
|
+
%q{a ? b | '': nil},
|
6953
|
+
%q{ ^~ location},
|
6954
|
+
SINCE_2_2)
|
6955
|
+
|
6956
|
+
assert_diagnoses(
|
6957
|
+
[:error, :unexpected_token, { :token => 'tTILDE' }],
|
6958
|
+
%q{a ? b ~ '': nil},
|
6959
|
+
%q{ ^ location},
|
6960
|
+
SINCE_2_2)
|
6961
|
+
|
6962
|
+
assert_diagnoses(
|
6963
|
+
[:error, :unexpected_token, { :token => 'tBANG' }],
|
6964
|
+
%q{a ? b ! '': nil},
|
6965
|
+
%q{ ^ location},
|
6966
|
+
SINCE_2_2)
|
6967
|
+
end
|
6845
6968
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.0
|
4
|
+
version: 2.5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- whitequark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|
@@ -216,6 +216,8 @@ files:
|
|
216
216
|
- lib/parser/ruby24.y
|
217
217
|
- lib/parser/ruby25.rb
|
218
218
|
- lib/parser/ruby25.y
|
219
|
+
- lib/parser/ruby26.rb
|
220
|
+
- lib/parser/ruby26.y
|
219
221
|
- lib/parser/rubymotion.rb
|
220
222
|
- lib/parser/rubymotion.y
|
221
223
|
- lib/parser/runner.rb
|