[clang-tools-extra] r271302 - [find-all-symbols] remove dots in SymbolInfo file paths.

Eric Liu via cfe-commits cfe-commits at lists.llvm.org
Tue May 31 10:37:38 PDT 2016


Author: ioeric
Date: Tue May 31 12:37:38 2016
New Revision: 271302

URL: http://llvm.org/viewvc/llvm-project?rev=271302&view=rev
Log:
[find-all-symbols] remove dots in SymbolInfo file paths.

Summary: remove dots in SymbolInfo file paths.

Reviewers: bkramer, klimek

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D20819

Modified:
    clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllMacros.cpp
    clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp
    clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp

Modified: clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllMacros.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllMacros.cpp?rev=271302&r1=271301&r2=271302&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllMacros.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllMacros.cpp Tue May 31 12:37:38 2016
@@ -13,6 +13,7 @@
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Lex/Token.h"
+#include "llvm/Support/Path.h"
 
 namespace clang {
 namespace find_all_symbols {
@@ -30,8 +31,11 @@ void FindAllMacros::MacroDefined(const T
   // If Collector is not nullptr, check pragma remapping header.
   FilePath = Collector ? Collector->getMappedHeader(FilePath) : FilePath;
 
+  SmallString<256> CleanedFilePath = FilePath;
+  llvm::sys::path::remove_dots(CleanedFilePath, /*remove_dot_dot=*/true);
+
   SymbolInfo Symbol(MacroNameTok.getIdentifierInfo()->getName(),
-                    SymbolInfo::SymbolKind::Macro, FilePath.str(),
+                    SymbolInfo::SymbolKind::Macro, CleanedFilePath,
                     SM->getSpellingLineNumber(Loc), {});
 
   Reporter->reportSymbol(SM->getFileEntryForID(SM->getMainFileID())->getName(),

Modified: clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp?rev=271302&r1=271301&r2=271302&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp Tue May 31 12:37:38 2016
@@ -99,7 +99,10 @@ CreateSymbolInfo(const NamedDecl *ND, co
   // If Collector is not nullptr, check pragma remapping header.
   FilePath = Collector ? Collector->getMappedHeader(FilePath) : FilePath;
 
-  return SymbolInfo(ND->getNameAsString(), Type, FilePath.str(),
+  SmallString<256> CleanedFilePath = FilePath;
+  llvm::sys::path::remove_dots(CleanedFilePath, /*remove_dot_dot=*/true);
+
+  return SymbolInfo(ND->getNameAsString(), Type, CleanedFilePath,
                     SM.getExpansionLineNumber(Loc), GetContexts(ND));
 }
 

Modified: clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp?rev=271302&r1=271301&r2=271302&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp Tue May 31 12:37:38 2016
@@ -90,13 +90,28 @@ public:
     InMemoryFileSystem->addFile(HeaderName, 0,
                                 llvm::MemoryBuffer::getMemBuffer(Code));
 
+    // Test path cleaning for both decls and macros.
+    const std::string DirtyHeader = "./internal/../internal/./a/b.h";
+    const std::string CleanHeader = "internal/a/b.h";
+    const std::string DirtyHeaderContent =
+        "#define INTERNAL 1\nclass ExtraInternal {};";
+    InMemoryFileSystem->addFile(
+        DirtyHeader, 0, llvm::MemoryBuffer::getMemBuffer(DirtyHeaderContent));
+    SymbolInfo DirtyMacro("INTERNAL", SymbolInfo::SymbolKind::Macro,
+                          CleanHeader, 1, {});
+    SymbolInfo DirtySymbol("ExtraInternal", SymbolInfo::SymbolKind::Class,
+                           CleanHeader, 2, {});
+
     std::string Content = "#include\"" + std::string(HeaderName) +
                           "\"\n"
-                          "#include \"internal/internal.h\"";
+                          "#include \"internal/internal.h\"\n"
+                          "#include \"" + DirtyHeader + "\"";
     InMemoryFileSystem->addFile(FileName, 0,
                                 llvm::MemoryBuffer::getMemBuffer(Content));
     Invocation.run();
     EXPECT_TRUE(hasSymbol(InternalSymbol));
+    EXPECT_TRUE(hasSymbol(DirtySymbol));
+    EXPECT_TRUE(hasSymbol(DirtyMacro));
     return true;
   }
 




More information about the cfe-commits mailing list