bkramer created this revision.
bkramer added reviewers: hokein, ioeric.
bkramer added a subscriber: cfe-commits.
If a search string starts with "::" we don't want to return any results
for suffixes of that string.
http://reviews.llvm.org/D20424
Files:
include-fixer/SymbolIndexManager.cpp
unittests/include-fixer/IncludeFixerTest.cpp
Index: unittests/include-fixer/IncludeFixerTest.cpp
===================================================================
--- unittests/include-fixer/IncludeFixerTest.cpp
+++ unittests/include-fixer/IncludeFixerTest.cpp
@@ -103,6 +103,12 @@
// 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) {
Index: include-fixer/SymbolIndexManager.cpp
===================================================================
--- include-fixer/SymbolIndexManager.cpp
+++ include-fixer/SymbolIndexManager.cpp
@@ -24,6 +24,12 @@
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 @@
}
}
+ // 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()) {
Index: unittests/include-fixer/IncludeFixerTest.cpp
===================================================================
--- unittests/include-fixer/IncludeFixerTest.cpp
+++ unittests/include-fixer/IncludeFixerTest.cpp
@@ -103,6 +103,12 @@
// 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) {
Index: include-fixer/SymbolIndexManager.cpp
===================================================================
--- include-fixer/SymbolIndexManager.cpp
+++ include-fixer/SymbolIndexManager.cpp
@@ -24,6 +24,12 @@
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 @@
}
}
+ // 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()) {
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits