зеркало из https://github.com/microsoft/clang-1.git
Minor tweaks for code-completion:
- Filter out unnamed declarations - Filter out declarations whose names are reserved for the implementation (e.g., __bar, _Foo) - Place OVERLOAD: or COMPLETION: at the beginning of each code-completion result, so we can easily separate them from other compilation results. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83680 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4f089110e3
Коммит
f52cedee87
|
@ -137,6 +137,7 @@ PrintingCodeCompleteConsumer::ProcessCodeCompleteResults(Result *Results,
|
|||
unsigned NumResults) {
|
||||
// Print the results.
|
||||
for (unsigned I = 0; I != NumResults; ++I) {
|
||||
OS << "COMPLETION: ";
|
||||
switch (Results[I].Kind) {
|
||||
case Result::RK_Declaration:
|
||||
OS << Results[I].Declaration->getNameAsString() << " : "
|
||||
|
@ -171,7 +172,7 @@ PrintingCodeCompleteConsumer::ProcessOverloadCandidates(unsigned CurrentArg,
|
|||
for (unsigned I = 0; I != NumCandidates; ++I) {
|
||||
if (CodeCompletionString *CCS
|
||||
= Candidates[I].CreateSignatureString(CurrentArg, SemaRef)) {
|
||||
OS << CCS->getAsString() << "\n";
|
||||
OS << "OVERLOAD: " << CCS->getAsString() << "\n";
|
||||
delete CCS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -199,6 +199,10 @@ void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Skip unnamed entities.
|
||||
if (!R.Declaration->getDeclName())
|
||||
return;
|
||||
|
||||
// Look through using declarations.
|
||||
if (UsingDecl *Using = dyn_cast<UsingDecl>(R.Declaration))
|
||||
MaybeAddResult(Result(Using->getTargetDecl(), R.Rank, R.Qualifier),
|
||||
|
@ -229,8 +233,14 @@ void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
|
|||
if (Id->isStr("__va_list_tag") || Id->isStr("__builtin_va_list"))
|
||||
return;
|
||||
|
||||
// FIXME: Should we filter out other names in the implementation's
|
||||
// namespace, e.g., those containing a __ or that start with _[A-Z]?
|
||||
// Filter out names reserved for the implementation (C99 7.1.3,
|
||||
// C++ [lib.global.names]). Users don't need to see those.
|
||||
if (Id->getLength() >= 2) {
|
||||
const char *Name = Id->getName();
|
||||
if (Name[0] == '_' &&
|
||||
(Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// C++ constructors are never found by name lookup.
|
||||
|
|
Загрузка…
Ссылка в новой задаче