diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-19 05:10:38 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-19 05:10:38 +0000 |
commit | 8b501f6d7fa6aa85912dc36abccdac8915fe3b22 (patch) | |
tree | f8e6165495c7761c9795c4a8e8cdb758564ff603 | |
parent | 0e7936f89647a8ba2cd664dfde47e6a2e2c94e69 (diff) | |
download | ruby-8b501f6d7fa6aa85912dc36abccdac8915fe3b22.tar.gz |
parse.y: indent at '#'
* parse.y (parser_here_document): update indent at '#', which is
not a space. [ruby-core:83368] [Bug #14032]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60213 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | parse.y | 6 | ||||
-rw-r--r-- | test/ripper/test_lexer.rb | 20 | ||||
-rw-r--r-- | test/ruby/test_syntax.rb | 8 |
3 files changed, 34 insertions, 0 deletions
@@ -6732,6 +6732,12 @@ parser_here_document(struct parser_params *parser, NODE *here) newtok(); if (c == '#') { int t = parser_peek_variable_name(parser); + if (heredoc_line_indent != -1) { + if (heredoc_indent > heredoc_line_indent) { + heredoc_indent = heredoc_line_indent; + } + heredoc_line_indent = -1; + } if (t) return t; tokadd('#'); c = nextc(); diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb index f900ee935d..2a1c7881e4 100644 --- a/test/ripper/test_lexer.rb +++ b/test/ripper/test_lexer.rb @@ -70,4 +70,24 @@ class TestRipper::Lexer < Test::Unit::TestCase ] assert_equal expect, Ripper.lex(src).map {|e| e[1]} end + + def test_expr_at_beginning_in_heredoc + src = <<~'E' + <<~B + a + #{1} + B + E + expect = %I[ + on_heredoc_beg + on_nl + on_tstring_content + 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 diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 57cc5b9611..62b8d65441 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -659,6 +659,14 @@ e" end end + def test_dedented_heredoc_expr_at_beginning + result = " a\n" \ + '#{1}'"\n" + expected = " a\n" \ + '#{1}'"\n" + assert_dedented_heredoc(expected, result) + end + def test_lineno_after_heredoc bug7559 = '[ruby-dev:46737]' expected, _, actual = __LINE__, <<eom, __LINE__ |