diff options
-rw-r--r-- | lib/irb/ruby-lex.rb | 16 | ||||
-rw-r--r-- | test/irb/test_ruby_lex.rb | 16 |
2 files changed, 22 insertions, 10 deletions
diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb index e281169788..f0c056e297 100644 --- a/lib/irb/ruby-lex.rb +++ b/lib/irb/ruby-lex.rb @@ -207,7 +207,7 @@ class RubyLex last_line = lines[line_index]&.byteslice(0, byte_pointer) code += last_line if last_line @tokens = self.class.ripper_lex_without_warning(code, context: context) - corresponding_token_depth = check_corresponding_token_depth + corresponding_token_depth = check_corresponding_token_depth(lines, line_index) if corresponding_token_depth corresponding_token_depth else @@ -603,7 +603,7 @@ class RubyLex depth_difference end - def check_corresponding_token_depth + def check_corresponding_token_depth(lines, line_index) corresponding_token_depth = nil is_first_spaces_of_line = true is_first_printable_of_line = true @@ -611,6 +611,11 @@ class RubyLex spaces_at_line_head = 0 open_brace_on_line = 0 in_oneliner_def = nil + + if heredoc_scope? + return lines[line_index][/^ */].length + end + @tokens.each_with_index do |t, index| # detecting one-liner method definition if in_oneliner_def.nil? @@ -817,5 +822,12 @@ class RubyLex end false end + + private + + def heredoc_scope? + heredoc_tokens = @tokens.select { |t| [:on_heredoc_beg, :on_heredoc_end].include?(t.event) } + heredoc_tokens[-1]&.event == :on_heredoc_beg + end end # :startdoc: diff --git a/test/irb/test_ruby_lex.rb b/test/irb/test_ruby_lex.rb index e255720e25..e02370d3f7 100644 --- a/test/irb/test_ruby_lex.rb +++ b/test/irb/test_ruby_lex.rb @@ -109,8 +109,8 @@ module TestIRB Row.new(%q( ]), 4, 4), Row.new(%q( ]), 2, 2), Row.new(%q(]), 0, 0), - Row.new(%q([<<FOO]), nil, 0), - Row.new(%q(hello), nil, 0), + Row.new(%q([<<FOO]), 0, 0), + Row.new(%q(hello), 0, 0), Row.new(%q(FOO), nil, 0), ] @@ -465,10 +465,10 @@ module TestIRB def test_heredoc_with_indent input_with_correct_indents = [ - Row.new(%q(<<~Q), nil, 0, 0), - Row.new(%q({), nil, 0, 0), - Row.new(%q( #), nil, 0, 0), - Row.new(%q(}), nil, 0, 0), + Row.new(%q(<<~Q), 0, 0, 0), + Row.new(%q({), 0, 0, 0), + Row.new(%q( #), 2, 0, 0), + Row.new(%q(}), 0, 0, 0) ] lines = [] @@ -503,8 +503,8 @@ module TestIRB end input_with_correct_indents = [ Row.new(%q(def foo), nil, 2, 1), - Row.new(%q( <<~Q), nil, 2, 1), - Row.new(%q( Qend), nil, 2, 1), + Row.new(%q( <<~Q), 2, 2, 1), + Row.new(%q( Qend), 2, 2, 1), ] lines = [] |