summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2020-12-23 02:18:32 +0900
committeraycabta <aycabta@gmail.com>2020-12-23 06:06:07 +0900
commit841d22ea479f37ab03d3f6c575997a2dd1b6d0a8 (patch)
tree15a0f874994b7c91267a4bfe678ace6d81417a97 /lib
parentbe5faa2519f1ab70eafd58caccbc3a8cba2718dc (diff)
[ruby/reline] [ruby/irb] Handle multiple newlines in a token correctly
Co-authored-by: manga_osyo <manga.osyo@gmail.com> Co-authored-by: ima1zumi <mariimaizumi5@gmail.com> https://github.com/ruby/irb/commit/c59a9be82f https://github.com/ruby/reline/commit/a7922da16b
Diffstat (limited to 'lib')
-rw-r--r--lib/irb/ruby-lex.rb13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb
index 71145224ad..b07027898c 100644
--- a/lib/irb/ruby-lex.rb
+++ b/lib/irb/ruby-lex.rb
@@ -66,14 +66,19 @@ class RubyLex
unprocessed_tokens = []
line_num_offset = 0
tokens.each do |t|
- code << t[2]
partial_tokens << t
unprocessed_tokens << t
if t[2].include?("\n")
- ltype, indent, continue, code_block_open = check_state(code, partial_tokens)
- result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
- line_num_offset += 1
+ t_str = t[2]
+ t_str.each_line("\n") do |s|
+ code << s << "\n"
+ ltype, indent, continue, code_block_open = check_state(code, partial_tokens)
+ result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
+ line_num_offset += 1
+ end
unprocessed_tokens = []
+ else
+ code << t[2]
end
end
unless unprocessed_tokens.empty?