From 66e0d92de571c357ebc50f11edffa3b65271e55c Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Wed, 3 Jan 2024 13:47:47 +0000 Subject: [PATCH] [ruby/irb] Avoid completing empty input (https://github.com/ruby/irb/pull/832) The candidate list for empty input is all methods + all variables + all constants + all keywords. It's a long list that is not useful. https://github.com/ruby/irb/commit/812dc2df7b --- lib/irb/completion.rb | 8 +++++++- test/irb/test_completion.rb | 7 +++++++ test/irb/yamatanooroti/test_rendering.rb | 6 ++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb index af3b69eb27..7b9c1bbbdd 100644 --- a/lib/irb/completion.rb +++ b/lib/irb/completion.rb @@ -406,7 +406,13 @@ module IRB else select_message(receiver, message, candidates.sort) end - + when /^\s*$/ + # empty input + if doc_namespace + nil + else + [] + end else if doc_namespace vars = (bind.local_variables | bind.eval_instance_variables).collect{|m| m.to_s} diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb index 0625c96976..348cd4b6dc 100644 --- a/test/irb/test_completion.rb +++ b/test/irb/test_completion.rb @@ -204,6 +204,13 @@ module TestIRB end end + def test_not_completing_empty_string + assert_equal([], completion_candidates("", binding)) + assert_equal([], completion_candidates(" ", binding)) + assert_equal([], completion_candidates("\t", binding)) + assert_equal(nil, doc_namespace("", binding)) + end + def test_complete_symbol symbols = %w"UTF-16LE UTF-7".map do |enc| "K".force_encoding(enc).to_sym diff --git a/test/irb/yamatanooroti/test_rendering.rb b/test/irb/yamatanooroti/test_rendering.rb index a53dc83ac7..f698466e49 100644 --- a/test/irb/yamatanooroti/test_rendering.rb +++ b/test/irb/yamatanooroti/test_rendering.rb @@ -232,7 +232,8 @@ class IRB::RenderingTest < Yamatanooroti::TestCase puts 'start IRB' LINES start_terminal(4, 19, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') - write("IR\C-i") + write("IR") + write("\C-i") close # This is because on macOS we display different shortcut for displaying the full doc @@ -268,7 +269,8 @@ class IRB::RenderingTest < Yamatanooroti::TestCase puts 'start IRB' LINES start_terminal(4, 12, %W{ruby -I#{@pwd}/lib #{@pwd}/exe/irb}, startup_message: 'start IRB') - write("IR\C-i") + write("IR") + write("\C-i") close assert_screen(<<~EOC) start IRB