Skip to content

Commit

Permalink
[ruby/reline] Suppress crashing when dynamic_prompt_proc returns a br…
Browse files Browse the repository at this point in the history
…oken prompt list

Co-authored-by: Juanito Fatas <me@juanitofatas.com>

ruby/reline@558f7be168
  • Loading branch information
aycabta committed Jan 8, 2021
1 parent 88af508 commit 76c9a3c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
7 changes: 7 additions & 0 deletions lib/reline/line_editor.rb
Expand Up @@ -112,6 +112,7 @@ def simplified_rendering?
use_cached_prompt_list = true
end
end
use_cached_prompt_list = false if @rerender_all
if use_cached_prompt_list
prompt_list = @cached_prompt_list
else
Expand All @@ -123,6 +124,12 @@ def simplified_rendering?
prompt_list = prompt_list.map{ |pr| mode_string + pr } if mode_string
prompt = prompt_list[@line_index]
prompt = prompt_list[0] if prompt.nil?
prompt = prompt_list.last if prompt.nil?
if buffer.size > prompt_list.size
(buffer.size - prompt_list.size).times do
prompt_list << prompt_list.last
end
end
prompt_width = calculate_width(prompt, true)
[prompt, prompt_width, prompt_list]
else
Expand Down
12 changes: 12 additions & 0 deletions test/reline/yamatanooroti/test_rendering.rb
Expand Up @@ -450,6 +450,18 @@ def test_prompt_list_caching
EOC
end

def test_broken_prompt_list
start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl --broken-dynamic-prompt}, startup_message: 'Multiline REPL.')
write("def hoge\n 3\nend")
close
assert_screen(<<~EOC)
Multiline REPL.
[0000]> def hoge
[0001]> 3
[0001]> end
EOC
end

def test_enable_bracketed_paste
omit if Reline::IOGate.win?
write_inputrc <<~LINES
Expand Down

0 comments on commit 76c9a3c

Please sign in to comment.