summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomoya ishida <tomoyapenguin@gmail.com>2023-03-06 14:52:41 +0900
committergit <svn-admin@ruby-lang.org>2023-03-06 05:52:46 +0000
commit0463c5806ac63bbd082f4abb1e3ceeae6ffc39ce (patch)
treeff89816a2a08cc3d9d5af7ab7bb4b9d8c26ce756
parent62e2b61607c04ff0d2543f0515b2171a24e66b4e (diff)
downloadruby-0463c5806ac63bbd082f4abb1e3ceeae6ffc39ce.tar.gz
[ruby/irb] Improve method completion for string and regexp that
includes word break characters (https://github.com/ruby/irb/pull/523) * Improve method completion for string and regexp that includes word break characters * Remove completion-test's assert_not_include because candidates no longer include every possible methods * Add comment about string's method completion regexp Co-authored-by: Stan Lo <stan001212@gmail.com> * Add comment about regexp's method completion regexp Co-authored-by: Stan Lo <stan001212@gmail.com> --------- https://github.com/ruby/irb/commit/aa8128c533 Co-authored-by: Stan Lo <stan001212@gmail.com>
-rw-r--r--lib/irb/completion.rb10
-rw-r--r--test/irb/test_completion.rb4
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb
index 76111393b6..c21ebfbdbd 100644
--- a/lib/irb/completion.rb
+++ b/lib/irb/completion.rb
@@ -166,10 +166,12 @@ module IRB
def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding, doc_namespace: false)
case input
- when /^((["'`]).*\2)\.([^.]*)$/
+ # this regexp only matches the closing character because of irb's Reline.completer_quote_characters setting
+ # details are described in: https://github.com/ruby/irb/pull/523
+ when /^(.*["'`])\.([^.]*)$/
# String
receiver = $1
- message = $3
+ message = $2
if doc_namespace
"String.#{message}"
@@ -178,7 +180,9 @@ module IRB
select_message(receiver, message, candidates)
end
- when /^(\/[^\/]*\/)\.([^.]*)$/
+ # this regexp only matches the closing character because of irb's Reline.completer_quote_characters setting
+ # details are described in: https://github.com/ruby/irb/pull/523
+ when /^(.*\/)\.([^.]*)$/
# Regexp
receiver = $1
message = $2
diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb
index a16ee5b079..e259428d76 100644
--- a/test/irb/test_completion.rb
+++ b/test/irb/test_completion.rb
@@ -14,11 +14,15 @@ module TestIRB
class TestMethodCompletion < TestCompletion
def test_complete_string
assert_include(IRB::InputCompletor.retrieve_completion_data("'foo'.up", bind: binding), "'foo'.upcase")
+ # completing 'foo bar'.up
+ assert_include(IRB::InputCompletor.retrieve_completion_data("bar'.up", bind: binding), "bar'.upcase")
assert_equal("String.upcase", IRB::InputCompletor.retrieve_completion_data("'foo'.upcase", bind: binding, doc_namespace: true))
end
def test_complete_regexp
assert_include(IRB::InputCompletor.retrieve_completion_data("/foo/.ma", bind: binding), "/foo/.match")
+ # completing /foo bar/.ma
+ assert_include(IRB::InputCompletor.retrieve_completion_data("bar/.ma", bind: binding), "bar/.match")
assert_equal("Regexp.match", IRB::InputCompletor.retrieve_completion_data("/foo/.match", bind: binding, doc_namespace: true))
end