From: Douglas Gregor Date: Tue, 9 Nov 2010 03:59:40 +0000 (+0000) Subject: Teach code completion not to include out-of-line declarations and X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9b0ba87a5ee4d872ae60dbfe4cbd500e57b8a775;p=clang Teach code completion not to include out-of-line declarations and definitions in its results. The original declarations will be visible wherever they are declared. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118484 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index 90b005ddc3..73c19a755b 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -505,6 +505,14 @@ bool ResultBuilder::isInterestingDecl(NamedDecl *ND, } } + // Skip out-of-line declarations and definitions. + // NOTE: Unless it's an Objective-C property, method, or ivar, where + // the contexts can be messy. + if (!ND->getDeclContext()->Equals(ND->getLexicalDeclContext()) && + !(isa(ND) || isa(ND) || + isa(ND))) + return false; + if (Filter == &ResultBuilder::IsNestedNameSpecifier || ((isa(ND) || isa(ND)) && Filter != &ResultBuilder::IsNamespace && @@ -5724,7 +5732,6 @@ void Sema::CodeCompleteNaturalLanguage() { void Sema::GatherGlobalCodeCompletions( llvm::SmallVectorImpl &Results) { ResultBuilder Builder(*this, CodeCompletionContext::CCC_Recovery); - if (!CodeCompleter || CodeCompleter->includeGlobals()) { CodeCompletionDeclConsumer Consumer(Builder, Context.getTranslationUnitDecl()); diff --git a/test/Index/complete-exprs.cpp b/test/Index/complete-exprs.cpp index 1c99e7e7f8..b514c06bff 100644 --- a/test/Index/complete-exprs.cpp +++ b/test/Index/complete-exprs.cpp @@ -11,17 +11,19 @@ template class vector { public: vector(const T &, unsigned n); - template vector(InputIterator first, InputIterator last); + void push_back(const T&); }; - +template void vector::push_back(const T&) { } void f() { } // RUN: c-index-test -code-completion-at=%s:20:2 %s | FileCheck -check-prefix=CHECK-CC1 %s // RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_COMPLETION_CACHING=1 c-index-test -code-completion-at=%s:20:2 %s | FileCheck -check-prefix=CHECK-CC1 %s +// CHECK-CC1: NotImplemented:{TypedText operator} (40) +// CHECK-CC1-NOT: push_back // CHECK-CC1: ClassDecl:{TypedText string} (50) // CHECK-CC1: CXXConstructor:{TypedText string}{LeftParen (}{RightParen )} (50) // CHECK-CC1: CXXConstructor:{TypedText string}{LeftParen (}{Placeholder const char *}{RightParen )} (50)