зеркало из https://github.com/github/ruby.git
lexer.rb: ignore dedented space
* ext/ripper/lib/ripper/lexer.rb (on_heredoc_dedent): replace an empty string content because of dedentation with :on_ignored_sp. an empty token makes the sorted order unstable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
650e758060
Коммит
d9d8ca0b8f
|
@ -72,6 +72,11 @@ class Ripper
|
|||
if Elem === e and e.event == :on_tstring_content
|
||||
tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok
|
||||
if (n = dedent_string(e.tok, w)) > 0
|
||||
if e.tok.empty?
|
||||
e.tok = tok[0, n]
|
||||
e.event = :on_ignored_sp
|
||||
next
|
||||
end
|
||||
ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n])]
|
||||
e.pos[1] += n
|
||||
end
|
||||
|
|
|
@ -32,4 +32,23 @@ class TestRipper::Lexer < Test::Unit::TestCase
|
|||
E
|
||||
assert_equal(str, Ripper.tokenize(str).join(""), bug)
|
||||
end
|
||||
|
||||
def test_embedded_expr_in_heredoc
|
||||
src = <<~'E'
|
||||
<<~B
|
||||
#{1}
|
||||
B
|
||||
E
|
||||
expect = %I[
|
||||
on_heredoc_beg
|
||||
on_nl
|
||||
on_ignored_sp
|
||||
on_embexpr_beg
|
||||
on_int
|
||||
on_embexpr_end
|
||||
on_tstring_content
|
||||
on_heredoc_end
|
||||
]
|
||||
assert_equal expect, Ripper.lex(src).map {|e| e[1]}
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче