[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
This commit is contained in:
Sam McCall 2018-10-24 13:51:44 +00:00
parent 52a11b5662
commit e8437cbf5e
2 changed files with 9 additions and 6 deletions

View File

@ -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 ||

View File

@ -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) {