kadircet created this revision. kadircet added a reviewer: hokein. Herald added a project: All. kadircet requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D144579 Files: clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp Index: clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp =================================================================== --- clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp +++ clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp @@ -122,9 +122,17 @@ } TEST(LocateSymbol, Stdlib) { - LocateExample Test("namespace std { struct vector; }"); - EXPECT_THAT(locateSymbol(Test.findDecl("vector")), - ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + { + LocateExample Test("namespace std { struct vector; }"); + EXPECT_THAT( + locateSymbol(Test.findDecl("vector")), + ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + } + { + LocateExample Test("#define assert(x)\nvoid foo() { assert(true); }"); + EXPECT_THAT(locateSymbol(Test.findMacro("assert")), + ElementsAre(*tooling::stdlib::Symbol::named("", "assert"))); + } } TEST(LocateSymbol, Macros) { Index: clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp =================================================================== --- clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp +++ clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "AnalysisInternal.h" +#include "clang-include-cleaner/Types.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclBase.h" #include "clang/AST/DeclCXX.h" @@ -53,6 +54,12 @@ return Result; } +std::vector<Hinted<SymbolLocation>> locateMacro(const Macro &M) { + // FIXME: Should we also provide physical locations? + if (auto SS = tooling::stdlib::Symbol::named("", M.Name->getName())) + return {{*SS, Hints::CompleteSymbol}}; + return {{M.Definition, Hints::CompleteSymbol}}; +} } // namespace std::vector<Hinted<SymbolLocation>> locateSymbol(const Symbol &S) { @@ -60,7 +67,7 @@ case Symbol::Declaration: return locateDecl(S.declaration()); case Symbol::Macro: - return {{S.macro().Definition, Hints::CompleteSymbol}}; + return locateMacro(S.macro()); } llvm_unreachable("Unknown Symbol::Kind enum"); }
Index: clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp =================================================================== --- clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp +++ clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp @@ -122,9 +122,17 @@ } TEST(LocateSymbol, Stdlib) { - LocateExample Test("namespace std { struct vector; }"); - EXPECT_THAT(locateSymbol(Test.findDecl("vector")), - ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + { + LocateExample Test("namespace std { struct vector; }"); + EXPECT_THAT( + locateSymbol(Test.findDecl("vector")), + ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + } + { + LocateExample Test("#define assert(x)\nvoid foo() { assert(true); }"); + EXPECT_THAT(locateSymbol(Test.findMacro("assert")), + ElementsAre(*tooling::stdlib::Symbol::named("", "assert"))); + } } TEST(LocateSymbol, Macros) { Index: clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp =================================================================== --- clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp +++ clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "AnalysisInternal.h" +#include "clang-include-cleaner/Types.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclBase.h" #include "clang/AST/DeclCXX.h" @@ -53,6 +54,12 @@ return Result; } +std::vector<Hinted<SymbolLocation>> locateMacro(const Macro &M) { + // FIXME: Should we also provide physical locations? + if (auto SS = tooling::stdlib::Symbol::named("", M.Name->getName())) + return {{*SS, Hints::CompleteSymbol}}; + return {{M.Definition, Hints::CompleteSymbol}}; +} } // namespace std::vector<Hinted<SymbolLocation>> locateSymbol(const Symbol &S) { @@ -60,7 +67,7 @@ case Symbol::Declaration: return locateDecl(S.declaration()); case Symbol::Macro: - return {{S.macro().Definition, Hints::CompleteSymbol}}; + return locateMacro(S.macro()); } llvm_unreachable("Unknown Symbol::Kind enum"); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits