parser 2.4.0.0 → 2.4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -4
- data/CHANGELOG.md +18 -27
- data/Rakefile +7 -2
- data/doc/AST_FORMAT.md +2 -37
- data/lib/parser/all.rb +1 -0
- data/lib/parser/builders/default.rb +18 -5
- data/lib/parser/current.rb +12 -3
- data/lib/parser/lexer.rl +4 -9
- data/lib/parser/lexer/literal.rb +1 -1
- data/lib/parser/macruby.y +20 -10
- data/lib/parser/meta.rb +4 -4
- data/lib/parser/ruby18.y +20 -10
- data/lib/parser/ruby19.y +20 -10
- data/lib/parser/ruby20.y +20 -10
- data/lib/parser/ruby21.y +10 -5
- data/lib/parser/ruby22.y +10 -5
- data/lib/parser/ruby23.y +10 -5
- data/lib/parser/ruby24.y +10 -5
- data/lib/parser/ruby25.y +2362 -0
- data/lib/parser/rubymotion.y +20 -10
- data/lib/parser/runner.rb +5 -0
- data/lib/parser/runner/ruby_rewrite.rb +1 -1
- data/lib/parser/source/buffer.rb +1 -1
- data/lib/parser/source/comment.rb +2 -3
- data/lib/parser/source/comment/associator.rb +8 -1
- data/lib/parser/source/rewriter.rb +4 -0
- data/lib/parser/version.rb +1 -1
- data/parser.gemspec +6 -5
- data/test/helper.rb +1 -1
- data/test/parse_helper.rb +7 -1
- data/test/racc_coverage_helper.rb +2 -1
- data/test/test_base.rb +1 -1
- data/test/test_current.rb +2 -0
- data/test/test_encoding.rb +6 -6
- data/test/test_lexer.rb +68 -30
- data/test/test_parse_helper.rb +3 -3
- data/test/test_parser.rb +136 -6
- data/test/test_source_comment_associator.rb +90 -0
- data/test/test_source_map.rb +1 -1
- metadata +15 -13
data/lib/parser/rubymotion.y
CHANGED
@@ -7,7 +7,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
7
7
|
kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
|
8
8
|
k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
|
9
9
|
tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
|
10
|
-
tUPLUS tUMINUS
|
10
|
+
tUPLUS tUMINUS tUNARY_NUM tPOW tCMP tEQ tEQQ tNEQ
|
11
11
|
tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
|
12
12
|
tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
|
13
13
|
tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE
|
@@ -21,7 +21,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
21
21
|
prechigh
|
22
22
|
right tBANG tTILDE tUPLUS
|
23
23
|
right tPOW
|
24
|
-
right
|
24
|
+
right tUNARY_NUM tUMINUS
|
25
25
|
left tSTAR2 tDIVIDE tPERCENT
|
26
26
|
left tPLUS tMINUS
|
27
27
|
left tLSHFT tRSHFT
|
@@ -646,14 +646,14 @@ rule
|
|
646
646
|
{
|
647
647
|
result = @builder.binary_op(val[0], val[1], val[2])
|
648
648
|
}
|
649
|
-
|
|
649
|
+
| tUNARY_NUM tINTEGER tPOW arg
|
650
650
|
{
|
651
651
|
result = @builder.unary_op(val[0],
|
652
652
|
@builder.binary_op(
|
653
653
|
@builder.integer(val[1]),
|
654
654
|
val[2], val[3]))
|
655
655
|
}
|
656
|
-
|
|
656
|
+
| tUNARY_NUM tFLOAT tPOW arg
|
657
657
|
{
|
658
658
|
result = @builder.unary_op(val[0],
|
659
659
|
@builder.binary_op(
|
@@ -1762,15 +1762,25 @@ regexp_contents: # nothing
|
|
1762
1762
|
{
|
1763
1763
|
result = @builder.float(val[0])
|
1764
1764
|
}
|
1765
|
-
|
|
1765
|
+
| tUNARY_NUM tINTEGER =tLOWEST
|
1766
1766
|
{
|
1767
|
-
|
1768
|
-
|
1767
|
+
num = @builder.integer(val[1])
|
1768
|
+
if @builder.respond_to? :negate
|
1769
|
+
# AST builder interface compatibility
|
1770
|
+
result = @builder.negate(val[0], num)
|
1771
|
+
else
|
1772
|
+
result = @builder.unary_num(val[0], num)
|
1773
|
+
end
|
1769
1774
|
}
|
1770
|
-
|
|
1775
|
+
| tUNARY_NUM tFLOAT =tLOWEST
|
1771
1776
|
{
|
1772
|
-
|
1773
|
-
|
1777
|
+
num = @builder.float(val[1])
|
1778
|
+
if @builder.respond_to? :negate
|
1779
|
+
# AST builder interface compatibility
|
1780
|
+
result = @builder.negate(val[0], num)
|
1781
|
+
else
|
1782
|
+
result = @builder.unary_num(val[0], num)
|
1783
|
+
end
|
1774
1784
|
}
|
1775
1785
|
|
1776
1786
|
variable: tIDENTIFIER
|
data/lib/parser/runner.rb
CHANGED
@@ -94,6 +94,11 @@ module Parser
|
|
94
94
|
@parser_class = Parser::Ruby24
|
95
95
|
end
|
96
96
|
|
97
|
+
opts.on '--25', 'Parse as Ruby 2.5 would' do
|
98
|
+
require 'parser/ruby25'
|
99
|
+
@parser_class = Parser::Ruby25
|
100
|
+
end
|
101
|
+
|
97
102
|
opts.on '--mac', 'Parse as MacRuby 0.12 would' do
|
98
103
|
require 'parser/macruby'
|
99
104
|
@parser_class = Parser::MacRuby
|
data/lib/parser/source/buffer.rb
CHANGED
@@ -54,7 +54,7 @@ module Parser
|
|
54
54
|
string =~ /\A(.*)\n?(.*\n)?/
|
55
55
|
first_line, second_line = $1, $2
|
56
56
|
|
57
|
-
if first_line
|
57
|
+
if first_line.start_with?("\xef\xbb\xbf".freeze) # BOM
|
58
58
|
return Encoding::UTF_8
|
59
59
|
elsif first_line[0, 2] == '#!'.freeze
|
60
60
|
encoding_line = second_line
|
@@ -184,9 +184,16 @@ module Parser
|
|
184
184
|
advance_comment
|
185
185
|
end
|
186
186
|
|
187
|
+
MAGIC_COMMENT_RE = /^#\s*(-\*-|)\s*(frozen_string_literal|warn_indent|warn_past_scope):.*\1$/
|
188
|
+
|
187
189
|
def advance_through_directives
|
188
190
|
# Skip shebang.
|
189
|
-
if @current_comment && @current_comment.text
|
191
|
+
if @current_comment && @current_comment.text.start_with?('#!'.freeze)
|
192
|
+
advance_comment
|
193
|
+
end
|
194
|
+
|
195
|
+
# Skip magic comments.
|
196
|
+
if @current_comment && @current_comment.text =~ MAGIC_COMMENT_RE
|
190
197
|
advance_comment
|
191
198
|
end
|
192
199
|
|
data/lib/parser/version.rb
CHANGED
data/parser.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
lib/parser/ruby22.rb
|
23
23
|
lib/parser/ruby23.rb
|
24
24
|
lib/parser/ruby24.rb
|
25
|
+
lib/parser/ruby25.rb
|
25
26
|
lib/parser/macruby.rb
|
26
27
|
lib/parser/rubymotion.rb
|
27
28
|
)
|
@@ -29,18 +30,18 @@ Gem::Specification.new do |spec|
|
|
29
30
|
spec.test_files = spec.files.grep(%r{^test/})
|
30
31
|
spec.require_paths = ['lib']
|
31
32
|
|
32
|
-
spec.add_dependency 'ast', '~> 2.
|
33
|
+
spec.add_dependency 'ast', '~> 2.3'
|
33
34
|
|
34
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
35
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
35
36
|
spec.add_development_dependency 'rake', '~> 10.0'
|
36
37
|
spec.add_development_dependency 'racc', '= 1.4.14'
|
37
|
-
spec.add_development_dependency 'cliver', '~> 0.3.
|
38
|
+
spec.add_development_dependency 'cliver', '~> 0.3.2'
|
38
39
|
|
39
40
|
spec.add_development_dependency 'yard'
|
40
41
|
spec.add_development_dependency 'kramdown'
|
41
42
|
|
42
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
43
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
43
|
+
spec.add_development_dependency 'minitest', '~> 5.10'
|
44
|
+
spec.add_development_dependency 'simplecov', '~> 0.15.1'
|
44
45
|
|
45
46
|
spec.add_development_dependency 'gauntlet'
|
46
47
|
end
|
data/test/helper.rb
CHANGED
@@ -7,7 +7,7 @@ if ENV.include?('COVERAGE') && SimpleCov.usable?
|
|
7
7
|
if defined?(TracePoint)
|
8
8
|
require_relative 'racc_coverage_helper'
|
9
9
|
|
10
|
-
RaccCoverage.start(%w(ruby18.y ruby19.y ruby20.y ruby21.y ruby22.y ruby23.y ruby24.y),
|
10
|
+
RaccCoverage.start(%w(ruby18.y ruby19.y ruby20.y ruby21.y ruby22.y ruby23.y ruby24.y ruby25.y),
|
11
11
|
File.expand_path('../../lib/parser', __FILE__))
|
12
12
|
|
13
13
|
# Report results faster.
|
data/test/parse_helper.rb
CHANGED
@@ -10,7 +10,7 @@ module ParseHelper
|
|
10
10
|
require 'parser/macruby'
|
11
11
|
require 'parser/rubymotion'
|
12
12
|
|
13
|
-
ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 mac ios)
|
13
|
+
ALL_VERSIONS = %w(1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 mac ios)
|
14
14
|
end
|
15
15
|
|
16
16
|
def setup
|
@@ -28,6 +28,7 @@ module ParseHelper
|
|
28
28
|
when '2.2' then parser = Parser::Ruby22.new
|
29
29
|
when '2.3' then parser = Parser::Ruby23.new
|
30
30
|
when '2.4' then parser = Parser::Ruby24.new
|
31
|
+
when '2.5' then parser = Parser::Ruby25.new
|
31
32
|
when 'mac' then parser = Parser::MacRuby.new
|
32
33
|
when 'ios' then parser = Parser::RubyMotion.new
|
33
34
|
else raise "Unrecognized Ruby version #{version}"
|
@@ -98,6 +99,11 @@ module ParseHelper
|
|
98
99
|
raise
|
99
100
|
end
|
100
101
|
|
102
|
+
if ast.nil?
|
103
|
+
assert_nil parsed_ast, "(#{version}) AST equality"
|
104
|
+
return
|
105
|
+
end
|
106
|
+
|
101
107
|
assert_equal ast, parsed_ast,
|
102
108
|
"(#{version}) AST equality"
|
103
109
|
|
@@ -15,7 +15,7 @@ module RaccCoverage
|
|
15
15
|
@coverage[parser] = extract_interesting_lines(parser, base_path)
|
16
16
|
end
|
17
17
|
|
18
|
-
@trace = TracePoint.
|
18
|
+
@trace = TracePoint.new(:line) do |trace|
|
19
19
|
lineno = trace.lineno - 1
|
20
20
|
|
21
21
|
if (line_coverage = @coverage[trace.path])
|
@@ -24,6 +24,7 @@ module RaccCoverage
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
+
@trace.enable
|
27
28
|
end
|
28
29
|
|
29
30
|
def self.stop
|
data/test/test_base.rb
CHANGED
data/test/test_current.rb
CHANGED
@@ -18,6 +18,8 @@ class TestCurrent < Minitest::Test
|
|
18
18
|
assert_equal Parser::Ruby23, Parser::CurrentRuby
|
19
19
|
when /^2\.4\.\d+/
|
20
20
|
assert_equal Parser::Ruby24, Parser::CurrentRuby
|
21
|
+
when /^2\.5\.\d+/
|
22
|
+
assert_equal Parser::Ruby25, Parser::CurrentRuby
|
21
23
|
else
|
22
24
|
flunk "Update test_current for #{RUBY_VERSION}"
|
23
25
|
end
|
data/test/test_encoding.rb
CHANGED
@@ -13,7 +13,7 @@ class TestEncoding < Minitest::Test
|
|
13
13
|
require 'parser/all'
|
14
14
|
|
15
15
|
def test_default
|
16
|
-
|
16
|
+
assert_nil recognize('foobar')
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_bom
|
@@ -38,16 +38,16 @@ class TestEncoding < Minitest::Test
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_empty
|
41
|
-
|
41
|
+
assert_nil recognize('')
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_no_comment
|
45
|
-
|
45
|
+
assert_nil recognize(%{require 'cane/encoding_aware_iterator'})
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_adjacent
|
49
|
-
|
50
|
-
|
49
|
+
assert_nil recognize('# codingkoi8-r')
|
50
|
+
assert_nil recognize('# coding koi8-r')
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_utf8_mac
|
@@ -60,7 +60,7 @@ class TestEncoding < Minitest::Test
|
|
60
60
|
assert_equal Encoding::UTF_8, recognize('# coding: utf-8-mac')
|
61
61
|
|
62
62
|
assert_raises(ArgumentError) do
|
63
|
-
|
63
|
+
assert_nil recognize('# coding: utf-8-dicks')
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
data/test/test_lexer.rb
CHANGED
@@ -178,13 +178,14 @@ class TestLexer < Minitest::Test
|
|
178
178
|
def test_ambiguous_uminus
|
179
179
|
assert_scanned("m -3",
|
180
180
|
:tIDENTIFIER, "m", [0, 1],
|
181
|
-
:
|
181
|
+
:tUNARY_NUM, "-", [2, 3],
|
182
182
|
:tINTEGER, 3, [3, 4])
|
183
183
|
end
|
184
184
|
|
185
185
|
def test_ambiguous_uplus
|
186
186
|
assert_scanned("m +3",
|
187
187
|
:tIDENTIFIER, "m", [0, 1],
|
188
|
+
:tUNARY_NUM, "+", [2, 3],
|
188
189
|
:tINTEGER, 3, [3, 4])
|
189
190
|
end
|
190
191
|
|
@@ -569,16 +570,6 @@ class TestLexer < Minitest::Test
|
|
569
570
|
:kEND, "end", [8, 11])
|
570
571
|
end
|
571
572
|
|
572
|
-
def test_do_cond
|
573
|
-
@lex.cond.push(true)
|
574
|
-
|
575
|
-
assert_scanned("x do 42 end",
|
576
|
-
:tIDENTIFIER, "x", [0, 1],
|
577
|
-
:kDO_COND, "do", [2, 4],
|
578
|
-
:tINTEGER, 42, [5, 7],
|
579
|
-
:kEND, "end", [8, 11])
|
580
|
-
end
|
581
|
-
|
582
573
|
def test_do_block
|
583
574
|
@lex.state = :expr_endarg
|
584
575
|
|
@@ -655,7 +646,13 @@ class TestLexer < Minitest::Test
|
|
655
646
|
|
656
647
|
def test_float_dot_E_neg
|
657
648
|
assert_scanned("-1.0E10",
|
658
|
-
:
|
649
|
+
:tUNARY_NUM, "-", [0, 1],
|
650
|
+
:tFLOAT, 1.0e10, [1, 7])
|
651
|
+
end
|
652
|
+
|
653
|
+
def test_float_dot_E_pos
|
654
|
+
assert_scanned("+1.0E10",
|
655
|
+
:tUNARY_NUM, "+", [0, 1],
|
659
656
|
:tFLOAT, 1.0e10, [1, 7])
|
660
657
|
end
|
661
658
|
|
@@ -665,7 +662,13 @@ class TestLexer < Minitest::Test
|
|
665
662
|
|
666
663
|
def test_float_dot_e_neg
|
667
664
|
assert_scanned("-1.0e10",
|
668
|
-
:
|
665
|
+
:tUNARY_NUM, "-", [0, 1],
|
666
|
+
:tFLOAT, 1.0e10, [1, 7])
|
667
|
+
end
|
668
|
+
|
669
|
+
def test_float_dot_e_pos
|
670
|
+
assert_scanned("+1.0e10",
|
671
|
+
:tUNARY_NUM, "+", [0, 1],
|
669
672
|
:tFLOAT, 1.0e10, [1, 7])
|
670
673
|
end
|
671
674
|
|
@@ -683,19 +686,37 @@ class TestLexer < Minitest::Test
|
|
683
686
|
|
684
687
|
def test_float_e_neg
|
685
688
|
assert_scanned("-1e10",
|
686
|
-
:
|
689
|
+
:tUNARY_NUM, "-", [0, 1],
|
687
690
|
:tFLOAT, 1e10, [1, 5])
|
688
691
|
end
|
689
692
|
|
690
693
|
def test_float_e_neg_minus
|
691
694
|
assert_scanned("-1e-10",
|
692
|
-
:
|
695
|
+
:tUNARY_NUM, "-", [0, 1],
|
693
696
|
:tFLOAT, 1e-10, [1, 6])
|
694
697
|
end
|
695
698
|
|
696
699
|
def test_float_e_neg_plus
|
697
700
|
assert_scanned("-1e+10",
|
698
|
-
:
|
701
|
+
:tUNARY_NUM, "-", [0, 1],
|
702
|
+
:tFLOAT, 1e10, [1, 6])
|
703
|
+
end
|
704
|
+
|
705
|
+
def test_float_e_pos
|
706
|
+
assert_scanned("+1e10",
|
707
|
+
:tUNARY_NUM, "+", [0, 1],
|
708
|
+
:tFLOAT, 1e10, [1, 5])
|
709
|
+
end
|
710
|
+
|
711
|
+
def test_float_e_pos_minus
|
712
|
+
assert_scanned("+1e-10",
|
713
|
+
:tUNARY_NUM, "+", [0, 1],
|
714
|
+
:tFLOAT, 1e-10, [1, 6])
|
715
|
+
end
|
716
|
+
|
717
|
+
def test_float_e_pos_plus
|
718
|
+
assert_scanned("+1e+10",
|
719
|
+
:tUNARY_NUM, "+", [0, 1],
|
699
720
|
:tFLOAT, 1e10, [1, 6])
|
700
721
|
end
|
701
722
|
|
@@ -727,7 +748,13 @@ class TestLexer < Minitest::Test
|
|
727
748
|
|
728
749
|
def test_float_neg
|
729
750
|
assert_scanned("-1.0",
|
730
|
-
:
|
751
|
+
:tUNARY_NUM, "-", [0, 1],
|
752
|
+
:tFLOAT, 1.0, [1, 4])
|
753
|
+
end
|
754
|
+
|
755
|
+
def test_float_pos
|
756
|
+
assert_scanned("+1.0",
|
757
|
+
:tUNARY_NUM, "+", [0, 1],
|
731
758
|
:tFLOAT, 1.0, [1, 4])
|
732
759
|
end
|
733
760
|
|
@@ -962,12 +989,14 @@ class TestLexer < Minitest::Test
|
|
962
989
|
end
|
963
990
|
|
964
991
|
def test_identifier_eh
|
992
|
+
setup_lexer 19
|
993
|
+
|
965
994
|
assert_scanned("identifier?",
|
966
995
|
:tFID, "identifier?", [0, 11])
|
967
996
|
|
968
997
|
assert_scanned("identifier?=",
|
969
998
|
:tIDENTIFIER, "identifier", [0, 10],
|
970
|
-
:
|
999
|
+
:tCHARACTER, "=", [10, 12])
|
971
1000
|
end
|
972
1001
|
|
973
1002
|
def test_identifier_cmp
|
@@ -978,10 +1007,6 @@ class TestLexer < Minitest::Test
|
|
978
1007
|
assert_lex_fname "identifier", :tIDENTIFIER, [0, 10]
|
979
1008
|
end
|
980
1009
|
|
981
|
-
def test_identifier_eh
|
982
|
-
assert_scanned("identifier?", :tFID, "identifier?", [0, 11])
|
983
|
-
end
|
984
|
-
|
985
1010
|
def test_identifier_equals_arrow
|
986
1011
|
assert_scanned(":blah==>",
|
987
1012
|
:tSYMBOL, "blah=", [0, 6],
|
@@ -1319,10 +1344,16 @@ class TestLexer < Minitest::Test
|
|
1319
1344
|
|
1320
1345
|
def test_minus_unary_number
|
1321
1346
|
assert_scanned("-42",
|
1322
|
-
:
|
1347
|
+
:tUNARY_NUM, "-", [0, 1],
|
1323
1348
|
:tINTEGER, 42, [1, 3])
|
1324
1349
|
end
|
1325
1350
|
|
1351
|
+
def test_minus_unary_whitespace_number
|
1352
|
+
assert_scanned("- 42",
|
1353
|
+
:tUNARY_NUM, "-", [0, 1],
|
1354
|
+
:tINTEGER, 42, [2, 4])
|
1355
|
+
end
|
1356
|
+
|
1326
1357
|
def test_nth_ref
|
1327
1358
|
assert_scanned('[$1, $2, $3]',
|
1328
1359
|
:tLBRACK, "[", [0, 1],
|
@@ -1448,6 +1479,18 @@ class TestLexer < Minitest::Test
|
|
1448
1479
|
assert_scanned "+@", :tUPLUS, "+@", [0, 2]
|
1449
1480
|
end
|
1450
1481
|
|
1482
|
+
def test_plus_unary_number
|
1483
|
+
assert_scanned("+42",
|
1484
|
+
:tUNARY_NUM, "+", [0, 1],
|
1485
|
+
:tINTEGER, 42, [1, 3])
|
1486
|
+
end
|
1487
|
+
|
1488
|
+
def test_plus_unary_whitespace_number
|
1489
|
+
assert_scanned("+ 42",
|
1490
|
+
:tUNARY_NUM, "+", [0, 1],
|
1491
|
+
:tINTEGER, 42, [2, 4])
|
1492
|
+
end
|
1493
|
+
|
1451
1494
|
def test_numbers
|
1452
1495
|
assert_scanned "0b10", :tINTEGER, 2, [0, 4]
|
1453
1496
|
assert_scanned "0B10", :tINTEGER, 2, [0, 4]
|
@@ -1492,11 +1535,6 @@ class TestLexer < Minitest::Test
|
|
1492
1535
|
refute_scanned "1.1end"
|
1493
1536
|
end
|
1494
1537
|
|
1495
|
-
def test_plus_unary_number
|
1496
|
-
assert_scanned("+42",
|
1497
|
-
:tINTEGER, 42, [1, 3])
|
1498
|
-
end
|
1499
|
-
|
1500
1538
|
def test_question__18
|
1501
1539
|
setup_lexer 18
|
1502
1540
|
|
@@ -2765,7 +2803,7 @@ class TestLexer < Minitest::Test
|
|
2765
2803
|
@lex.state = :expr_end
|
2766
2804
|
assert_scanned("\n+ 1",
|
2767
2805
|
:tNL, nil, [0, 1],
|
2768
|
-
:
|
2806
|
+
:tUNARY_NUM, '+', [1, 2],
|
2769
2807
|
:tINTEGER, 1, [3, 4])
|
2770
2808
|
|
2771
2809
|
@lex.state = :expr_end
|
@@ -2776,7 +2814,7 @@ class TestLexer < Minitest::Test
|
|
2776
2814
|
@lex.state = :expr_end
|
2777
2815
|
assert_scanned("#foo\n+ 1",
|
2778
2816
|
:tNL, nil, [4, 5],
|
2779
|
-
:
|
2817
|
+
:tUNARY_NUM, '+', [5, 6],
|
2780
2818
|
:tINTEGER, 1, [7, 8])
|
2781
2819
|
end
|
2782
2820
|
|