summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Lo <stan001212@gmail.com>2023-03-04 23:34:44 +0800
committergit <svn-admin@ruby-lang.org>2023-03-04 15:34:49 +0000
commit191e4ae33f5160bdd6f313e752a4eb719c3707b2 (patch)
treef60d49baff18929faf49375e0142e05cc2d85c04
parent6f81e38d1d77931e46aee0cb054c9cb3a82f3f3b (diff)
downloadruby-191e4ae33f5160bdd6f313e752a4eb719c3707b2.tar.gz
[ruby/irb] Drop chained methods' completion support
(https://github.com/ruby/irb/pull/529) Consider completion for this example: `foo.bar.b` Without type information, it is hard to know the return value of the `bar` method, so the current implementation interates through `ObjectSpace` to get all possible candidates for the second method. In small projects, the performance and accuracy are acceptable. But in bigger projects, the performance is unacceptable and the accuracy is mostly poor. So this commit drops the support for chained methods' completion.
-rw-r--r--lib/irb/completion.rb8
-rw-r--r--test/irb/test_completion.rb2
2 files changed, 0 insertions, 10 deletions
diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb
index b3b2ecf924..76111393b6 100644
--- a/lib/irb/completion.rb
+++ b/lib/irb/completion.rb
@@ -356,14 +356,6 @@ module IRB
else
# func1.func2
candidates = []
- to_ignore = ignored_modules
- ObjectSpace.each_object(Module){|m|
- next if (to_ignore.include?(m) rescue true)
- next unless m.respond_to?(:instance_methods) # JRuby has modules that represent java packages. They don't include many common ruby methods
- candidates.concat m.instance_methods(false).collect{|x| x.to_s}
- }
- candidates.sort!
- candidates.uniq!
end
if doc_namespace
diff --git a/test/irb/test_completion.rb b/test/irb/test_completion.rb
index c909b143a4..a16ee5b079 100644
--- a/test/irb/test_completion.rb
+++ b/test/irb/test_completion.rb
@@ -336,11 +336,9 @@ module TestIRB
bind = obj.instance_exec { binding }
assert_include(IRB::InputCompletor.retrieve_completion_data("public_hog", bind: bind), "public_hoge")
- assert_include(IRB::InputCompletor.retrieve_completion_data("public_hoge.to_s", bind: bind), "public_hoge.to_s")
assert_include(IRB::InputCompletor.retrieve_completion_data("public_hoge", bind: bind, doc_namespace: true), "public_hoge")
assert_include(IRB::InputCompletor.retrieve_completion_data("private_hog", bind: bind), "private_hoge")
- assert_include(IRB::InputCompletor.retrieve_completion_data("private_hoge.to_s", bind: bind), "private_hoge.to_s")
assert_include(IRB::InputCompletor.retrieve_completion_data("private_hoge", bind: bind, doc_namespace: true), "private_hoge")
end
end