forked from OSchip/llvm-project
[include-fixer] Make search handle fully qualified names correctly.
If a search string starts with "::" we don't want to return any results for suffixes of that string. Differential Revision: http://reviews.llvm.org/D20424 llvm-svn: 270055
This commit is contained in:
parent
469db6a247
commit
9b15b6f2d7
|
@ -24,6 +24,12 @@ SymbolIndexManager::search(llvm::StringRef Identifier) const {
|
|||
llvm::SmallVector<llvm::StringRef, 8> Names;
|
||||
Identifier.split(Names, "::");
|
||||
|
||||
bool IsFullyQualified = false;
|
||||
if (Identifier.startswith("::")) {
|
||||
Names.erase(Names.begin()); // Drop first (empty) element.
|
||||
IsFullyQualified = true;
|
||||
}
|
||||
|
||||
// As long as we don't find a result keep stripping name parts from the end.
|
||||
// This is to support nested classes which aren't recorded in the database.
|
||||
// Eventually we will either hit a class (namespaces aren't in the database
|
||||
|
@ -61,6 +67,11 @@ SymbolIndexManager::search(llvm::StringRef Identifier) const {
|
|||
}
|
||||
}
|
||||
|
||||
// If the name was qualified we only want to add results if we evaluated
|
||||
// all contexts.
|
||||
if (IsFullyQualified)
|
||||
IsMatched &= (SymbolContext == Symbol.getContexts().end());
|
||||
|
||||
// FIXME: Support full match. At this point, we only find symbols in
|
||||
// database which end with the same contexts with the identifier.
|
||||
if (IsMatched && IdentiferContext == Names.rend()) {
|
||||
|
|
|
@ -103,6 +103,12 @@ TEST(IncludeFixer, Typo) {
|
|||
// too.
|
||||
EXPECT_EQ("#include <string>\n\nstring foo;\n",
|
||||
runIncludeFixer("string foo;\n"));
|
||||
|
||||
// Fully qualified name.
|
||||
EXPECT_EQ("#include <string>\n\n::std::string foo;\n",
|
||||
runIncludeFixer("::std::string foo;\n"));
|
||||
// Should not match std::string.
|
||||
EXPECT_EQ("::string foo;\n", runIncludeFixer("::string foo;\n"));
|
||||
}
|
||||
|
||||
TEST(IncludeFixer, IncompleteType) {
|
||||
|
|
Loading…
Reference in New Issue