From e8437cbf5e9c41c27da6be13996963529c8ca1bf Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Wed, 24 Oct 2018 13:51:44 +0000 Subject: [PATCH] [clangd] Don't show base class versions of members as completions. Summary: These are available via qualifiers, but signal to noise level is low. Keep required quailifier machinery around though, for cross-ns completion. Reviewers: ioeric Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D53571 llvm-svn: 345141 --- clang-tools-extra/clangd/CodeComplete.cpp | 6 +++--- clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 8eb690d5f4e6..819cd6b3ce25 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -728,9 +728,9 @@ struct CompletionRecorder : public CodeCompleteConsumer { // Retain the results we might want. for (unsigned I = 0; I < NumResults; ++I) { auto &Result = InResults[I]; - // Drop hidden items which cannot be found by lookup after completion. - // Exception: some items can be named by using a qualifier. - if (Result.Hidden && (!Result.Qualifier || Result.QualifierIsInformative)) + // Class members that are shadowed by subclasses are usually noise. + if (Result.Hidden && Result.Declaration && + Result.Declaration->isCXXClassMember()) continue; if (!Opts.IncludeIneligibleResults && (Result.Availability == CXAvailability_NotAvailable || diff --git a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp index 8d99fc183f1f..7e93d8cd8cf6 100644 --- a/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp +++ b/clang-tools-extra/unittests/clangd/CodeCompleteTests.cpp @@ -381,10 +381,13 @@ TEST(CompletionTest, Qualifiers) { void test() { Bar().^ } )cpp"); EXPECT_THAT(Results.Completions, - HasSubsequence(AllOf(Qualifier(""), Named("bar")), - AllOf(Qualifier("Foo::"), Named("foo")))); + Contains(AllOf(Qualifier(""), Named("bar")))); + // Hidden members are not shown. EXPECT_THAT(Results.Completions, - Not(Contains(AllOf(Qualifier(""), Named("foo"))))); // private + Not(Contains(AllOf(Qualifier("Foo::"), Named("foo"))))); + // Private members are not shown. + EXPECT_THAT(Results.Completions, + Not(Contains(AllOf(Qualifier(""), Named("foo"))))); } TEST(CompletionTest, InjectedTypename) {