diff options
author | aycabta <aycabta@gmail.com> | 2020-12-23 02:18:32 +0900 |
---|---|---|
committer | aycabta <aycabta@gmail.com> | 2020-12-23 06:06:07 +0900 |
commit | 841d22ea479f37ab03d3f6c575997a2dd1b6d0a8 (patch) | |
tree | 15a0f874994b7c91267a4bfe678ace6d81417a97 /lib/irb | |
parent | be5faa2519f1ab70eafd58caccbc3a8cba2718dc (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/irb')
-rw-r--r-- | lib/irb/ruby-lex.rb | 13 |
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? |