summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-19 04:25:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-19 04:25:30 +0000
commit0e7936f89647a8ba2cd664dfde47e6a2e2c94e69 (patch)
treebb0e75b3433a93ff4da05e3be5c8c238008d4478
parentcda27e1a6d62e5e41be75bd90bfb777569165304 (diff)
lexer.rb: no dedent strings in middle
* ext/ripper/lib/ripper/lexer.rb (on_heredoc_dedent): dedent only strings at the beginning, not strings in middle. [ruby-core:83343] [Bug #14027] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ext/ripper/lib/ripper/lexer.rb2
-rw-r--r--test/ripper/test_lexer.rb19
2 files changed, 20 insertions, 1 deletions
diff --git a/ext/ripper/lib/ripper/lexer.rb b/ext/ripper/lib/ripper/lexer.rb
index bb59080..22f18ff 100644
--- a/ext/ripper/lib/ripper/lexer.rb
+++ b/ext/ripper/lib/ripper/lexer.rb
@@ -98,7 +98,7 @@ class Ripper
ignored_sp = []
heredoc = @buf.last
heredoc.each_with_index do |e, i|
- if Elem === e and e.event == :on_tstring_content
+ if Elem === e and e.event == :on_tstring_content and e.pos[1].zero?
tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok
if (n = dedent_string(e.tok, w)) > 0
if e.tok.empty?
diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb
index 2efc3be..f900ee9 100644
--- a/test/ripper/test_lexer.rb
+++ b/test/ripper/test_lexer.rb
@@ -51,4 +51,23 @@ class TestRipper::Lexer < Test::Unit::TestCase
]
assert_equal expect, Ripper.lex(src).map {|e| e[1]}
end
+
+ def test_space_after_expr_in_heredoc
+ src = <<~'E'
+ <<~B
+ #{1} a
+ 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