Only filter out names reserved for the implementation (e.g., __blah or
_Foo) from code-completion results when they come from a system header. llvm-svn: 108338
This commit is contained in:
@@ -407,13 +407,16 @@ bool ResultBuilder::isInterestingDecl(NamedDecl *ND,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Filter out names reserved for the implementation (C99 7.1.3,
|
// Filter out names reserved for the implementation (C99 7.1.3,
|
||||||
// C++ [lib.global.names]). Users don't need to see those.
|
// C++ [lib.global.names]) if they come from a system header.
|
||||||
//
|
//
|
||||||
// FIXME: Add predicate for this.
|
// FIXME: Add predicate for this.
|
||||||
if (Id->getLength() >= 2) {
|
if (Id->getLength() >= 2) {
|
||||||
const char *Name = Id->getNameStart();
|
const char *Name = Id->getNameStart();
|
||||||
if (Name[0] == '_' &&
|
if (Name[0] == '_' &&
|
||||||
(Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')))
|
(Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')) &&
|
||||||
|
(ND->getLocation().isInvalid() ||
|
||||||
|
SemaRef.SourceMgr.isInSystemHeader(
|
||||||
|
SemaRef.SourceMgr.getSpellingLoc(ND->getLocation()))))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
clang/test/CodeCompletion/Inputs/reserved.h
Normal file
2
clang/test/CodeCompletion/Inputs/reserved.h
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
typedef int _INTEGER_TYPE;
|
||||||
|
typedef float FLOATING_TYPE;
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
|
#include <reserved.h>
|
||||||
struct X { int x; };
|
struct X { int x; };
|
||||||
|
|
||||||
typedef struct t TYPEDEF;
|
typedef struct t TYPEDEF;
|
||||||
|
typedef struct t _TYPEDEF;
|
||||||
void foo() {
|
void foo() {
|
||||||
int y;
|
int y;
|
||||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:6:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
|
// RUN: %clang_cc1 -isystem %S/Inputs -fsyntax-only -code-completion-at=%s:6:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
|
||||||
|
// CHECK-CC1: _Imaginary
|
||||||
|
// CHECK-CC1-NOT: _INTEGER_TYPE;
|
||||||
|
// CHECK-CC1: _TYPEDEF
|
||||||
|
// CHECK-CC1: FLOATING_TYPE
|
||||||
// CHECK-CC1: foo
|
// CHECK-CC1: foo
|
||||||
// CHECK-CC1: y
|
|
||||||
// CHECK-CC1: TYPEDEF
|
// CHECK-CC1: TYPEDEF
|
||||||
|
// CHECK-CC1: y
|
||||||
|
|||||||
Reference in New Issue
Block a user