From 77265efc5f179d31be4ddea5d8fd6a5290fe678a Mon Sep 17 00:00:00 2001 From: tomoya ishida Date: Sat, 14 Oct 2023 23:12:37 +0900 Subject: [PATCH] Restore IRB::InputCompletor for compatibility (#730) --- lib/irb/completion.rb | 16 ++++++++++++++++ test/irb/test_completion.rb | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb index 795a35bb2..61bdc3358 100644 --- a/lib/irb/completion.rb +++ b/lib/irb/completion.rb @@ -415,4 +415,20 @@ def select_message(receiver, message, candidates, sep = ".") end end end + + module InputCompletor + class << self + private def regexp_completor + @regexp_completor ||= RegexpCompletor.new + end + + def retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding, doc_namespace: false) + regexp_completor.retrieve_completion_data(input, bind: bind, doc_namespace: doc_namespace) + end + end + CompletionProc = ->(target, preposing = nil, postposing = nil) { + regexp_completor.completion_candidates(preposing, target, postposing, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding) + } + end + deprecate_constant :InputCompletor end diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb index 19a6a4740..ed5b88d66 100644 --- a/test/irb/test_completion.rb +++ b/test/irb/test_completion.rb @@ -265,4 +265,29 @@ def instance_variables; end assert_include(doc_namespace("private_hoge", bind), "private_hoge") end end + + class DeprecatedInputCompletorTest < TestCase + def setup + @verbose, $VERBOSE = $VERBOSE, nil + IRB.init_config(nil) + IRB.conf[:MAIN_CONTEXT] = IRB::Context.new(IRB::WorkSpace.new(binding)) + end + + def teardown + $VERBOSE = @verbose + end + + def test_completion_proc + assert_include(IRB::InputCompletor::CompletionProc.call('1.ab'), '1.abs') + assert_include(IRB::InputCompletor::CompletionProc.call('1.ab', '', ''), '1.abs') + end + + def test_retrieve_completion_data + assert_include(IRB::InputCompletor.retrieve_completion_data('1.ab'), '1.abs') + assert_equal(IRB::InputCompletor.retrieve_completion_data('1.abs', doc_namespace: true), 'Integer.abs') + bind = eval('a = 1; binding') + assert_include(IRB::InputCompletor.retrieve_completion_data('a.ab', bind: bind), 'a.abs') + assert_equal(IRB::InputCompletor.retrieve_completion_data('a.abs', bind: bind, doc_namespace: true), 'Integer.abs') + end + end end