diff --git a/lib/ruby_indexer/lib/ruby_indexer/index.rb b/lib/ruby_indexer/lib/ruby_indexer/index.rb index d6675740c6..eeda05906c 100644 --- a/lib/ruby_indexer/lib/ruby_indexer/index.rb +++ b/lib/ruby_indexer/lib/ruby_indexer/index.rb @@ -291,6 +291,15 @@ def constant_completion_candidates(name, nesting) # Top level constants entries.concat(@entries_tree.search(name)) + + # Filter only constants since methods may have names that look like constants + entries.each do |definitions| + definitions.select! do |entry| + entry.is_a?(Entry::Constant) || entry.is_a?(Entry::ConstantAlias) || + entry.is_a?(Entry::Namespace) || entry.is_a?(Entry::UnresolvedConstantAlias) + end + end + entries.uniq! entries #: as Array[Array[Entry::Constant | Entry::ConstantAlias | Entry::Namespace | Entry::UnresolvedConstantAlias]] end diff --git a/lib/ruby_indexer/test/index_test.rb b/lib/ruby_indexer/test/index_test.rb index 1a0ec84e30..ddea6fec96 100644 --- a/lib/ruby_indexer/test/index_test.rb +++ b/lib/ruby_indexer/test/index_test.rb @@ -1983,6 +1983,18 @@ class Baz assert_equal(["XQRK"], result.map { |entries| entries.first&.name }) end + def test_constant_completion_does_not_confuse_uppercase_methods + index(<<~RUBY) + class Foo + def Qux + end + end + RUBY + + candidates = @index.constant_completion_candidates("Q", []) + refute_includes(candidates.flat_map { |entries| entries.map(&:name) }, "Qux") + end + def test_constant_completion_candidates_for_empty_name index(<<~RUBY) module Foo