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.
|
||||
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
|
||||
|
||||
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,1],:on_cvar,"@@1",state(:EXPR_ENDFN)], Ripper.lex(":@@1").last
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue