mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Include stack elements left after errors
This commit is contained in:
parent
279c8e14d4
commit
b0e2b7a5ff
2 changed files with 23 additions and 1 deletions
|
@ -103,7 +103,7 @@ class Ripper
|
||||||
|
|
||||||
# parse the code and returns elements including errors.
|
# parse the code and returns elements including errors.
|
||||||
def scan
|
def scan
|
||||||
(parse() + errors).sort_by {|e| [*e.pos, (e.message ? -1 : 0)]}
|
(parse() + errors + @stack.flatten).uniq.sort_by {|e| [*e.pos, (e.message ? -1 : 0)]}
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse
|
def parse
|
||||||
|
|
|
@ -113,4 +113,26 @@ class TestRipper::Lexer < Test::Unit::TestCase
|
||||||
assert_equal [[1,0],:on_cvar,"@@1",state(:EXPR_END)], Ripper.lex("@@1").last
|
assert_equal [[1,0],:on_cvar,"@@1",state(:EXPR_END)], Ripper.lex("@@1").last
|
||||||
assert_equal [[1,1],:on_cvar,"@@1",state(:EXPR_ENDFN)], Ripper.lex(":@@1").last
|
assert_equal [[1,1],:on_cvar,"@@1",state(:EXPR_ENDFN)], Ripper.lex(":@@1").last
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_token_aftr_error_heredoc
|
||||||
|
code = "<<A.upcase\n"
|
||||||
|
result = Ripper::Lexer.new(code).scan
|
||||||
|
message = proc {result.pretty_inspect}
|
||||||
|
expected = [
|
||||||
|
[[1, 0], :on_heredoc_beg, "<<A", state(:EXPR_BEG)],
|
||||||
|
[[1, 3], :on_period, ".", state(:EXPR_DOT)],
|
||||||
|
[[1, 4], :on_ident, "upcase", state(:EXPR_ARG)],
|
||||||
|
[[1, 10], :on_nl, "\n", state(:EXPR_BEG)],
|
||||||
|
[[1, 11], :compile_error, "", state(:EXPR_BEG), "can't find string \"A\" anywhere before EOF"],
|
||||||
|
]
|
||||||
|
pos = 0
|
||||||
|
expected.each_with_index do |ex, i|
|
||||||
|
s = result[i]
|
||||||
|
assert_equal ex, s.to_a, message
|
||||||
|
assert_equal pos, s.pos[1], message
|
||||||
|
pos += s.tok.bytesize
|
||||||
|
end
|
||||||
|
assert_equal pos, code.bytesize
|
||||||
|
assert_equal expected.size, result.size
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue