[clang-tools-extra] r297371 - [include-fixer] Remove line number from Symbol identity

Sam McCall via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 9 02:47:44 PST 2017


Author: sammccall
Date: Thu Mar  9 04:47:44 2017
New Revision: 297371

URL: http://llvm.org/viewvc/llvm-project?rev=297371&view=rev
Log:
[include-fixer] Remove line number from Symbol identity

Summary:
Remove line number from Symbol identity.

For our purposes (include-fixer and clangd autocomplete), function overloads
within the same header should mostly be treated as a single combined symbol.

We may want to track individual occurrences (line number, full type info)
and aggregate this during mapreduce, but that's not done here.

Reviewers: hokein, bkramer

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D30685

Modified:
    clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp
    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/include-fixer/find-all-symbols/SymbolInfo.cpp
    clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.h
    clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp
    clang-tools-extra/trunk/test/include-fixer/Inputs/fake_yaml_db.yaml
    clang-tools-extra/trunk/test/include-fixer/Inputs/merge/a.yaml
    clang-tools-extra/trunk/test/include-fixer/Inputs/merge/b.yaml
    clang-tools-extra/trunk/test/include-fixer/merge.test
    clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp
    clang-tools-extra/trunk/unittests/include-fixer/find-all-symbols/FindAllSymbolsTests.cpp

Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp Thu Mar  9 04:47:44 2017
@@ -333,8 +333,7 @@ IncludeFixerContext IncludeFixerSemaSour
                                                     : "\"" + FilePath + "\""),
         SourceManager, HeaderSearch);
     SymbolCandidates.emplace_back(Symbol.getName(), Symbol.getSymbolKind(),
-                                  MinimizedFilePath, Symbol.getLineNumber(),
-                                  Symbol.getContexts());
+                                  MinimizedFilePath, Symbol.getContexts());
   }
   return IncludeFixerContext(FilePath, QuerySymbolInfos, SymbolCandidates);
 }

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=297371&r1=297370&r2=297371&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 Thu Mar  9 04:47:44 2017
@@ -28,8 +28,7 @@ FindAllMacros::CreateMacroSymbol(const T
   if (FilePath.empty())
     return llvm::None;
   return SymbolInfo(MacroNameTok.getIdentifierInfo()->getName(),
-                    SymbolInfo::SymbolKind::Macro, FilePath,
-                    SM->getSpellingLineNumber(info->getDefinitionLoc()), {});
+                    SymbolInfo::SymbolKind::Macro, FilePath, {});
 }
 
 void FindAllMacros::MacroDefined(const Token &MacroNameTok,

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=297371&r1=297370&r2=297371&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 Thu Mar  9 04:47:44 2017
@@ -109,8 +109,7 @@ CreateSymbolInfo(const NamedDecl *ND, co
   std::string FilePath = getIncludePath(SM, Loc, Collector);
   if (FilePath.empty()) return llvm::None;
 
-  return SymbolInfo(ND->getNameAsString(), Type, FilePath,
-                    SM.getExpansionLineNumber(Loc), GetContexts(ND));
+  return SymbolInfo(ND->getNameAsString(), Type, FilePath, GetContexts(ND));
 }
 
 } // namespace
@@ -196,7 +195,7 @@ void FindAllSymbols::registerMatchers(Ma
       anyOf(hasDeclContext(enumDecl(HasNSOrTUCtxMatcher)), ExternCMatcher));
 
   // Most of the time we care about all matchable decls, or all types.
-  auto Types = namedDecl(anyOf(CRecords, CXXRecords, Enums, Typedefs));
+  auto Types = namedDecl(anyOf(CRecords, CXXRecords, Enums));
   auto Decls = namedDecl(anyOf(CRecords, CXXRecords, Enums, Typedefs, Vars,
                                EnumConstants, Functions));
 
@@ -219,8 +218,8 @@ void FindAllSymbols::registerMatchers(Ma
       typeLoc(isExpansionInMainFile(),
               loc(qualType(hasDeclaration(Types.bind("use"))))),
       this);
-  // Uses of typedefs: these are transparent to hasDeclaration, so we need to
-  // handle them explicitly.
+  // Uses of typedefs: these are often transparent to hasDeclaration, so we need
+  // to handle them explicitly.
   MatchFinder->addMatcher(
       typeLoc(isExpansionInMainFile(),
               loc(typedefType(hasDeclaration(Typedefs.bind("use"))))),

Modified: clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.cpp?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.cpp Thu Mar  9 04:47:44 2017
@@ -32,7 +32,6 @@ template <> struct MappingTraits<SymbolA
     io.mapRequired("Name", Symbol.Symbol.Name);
     io.mapRequired("Contexts", Symbol.Symbol.Contexts);
     io.mapRequired("FilePath", Symbol.Symbol.FilePath);
-    io.mapRequired("LineNumber", Symbol.Symbol.LineNumber);
     io.mapRequired("Type", Symbol.Symbol.Type);
     io.mapRequired("Seen", Symbol.Signals.Seen);
     io.mapRequired("Used", Symbol.Signals.Used);
@@ -74,21 +73,18 @@ namespace clang {
 namespace find_all_symbols {
 
 SymbolInfo::SymbolInfo(llvm::StringRef Name, SymbolKind Type,
-                       llvm::StringRef FilePath, int LineNumber,
+                       llvm::StringRef FilePath,
                        const std::vector<Context> &Contexts)
-    : Name(Name), Type(Type), FilePath(FilePath), Contexts(Contexts),
-      LineNumber(LineNumber) {}
+    : Name(Name), Type(Type), FilePath(FilePath), Contexts(Contexts) {}
 
 bool SymbolInfo::operator==(const SymbolInfo &Symbol) const {
-  return std::tie(Name, Type, FilePath, LineNumber, Contexts) ==
-         std::tie(Symbol.Name, Symbol.Type, Symbol.FilePath, Symbol.LineNumber,
-                  Symbol.Contexts);
+  return std::tie(Name, Type, FilePath, Contexts) ==
+         std::tie(Symbol.Name, Symbol.Type, Symbol.FilePath, Symbol.Contexts);
 }
 
 bool SymbolInfo::operator<(const SymbolInfo &Symbol) const {
-  return std::tie(Name, Type, FilePath, LineNumber, Contexts) <
-         std::tie(Symbol.Name, Symbol.Type, Symbol.FilePath, Symbol.LineNumber,
-                  Symbol.Contexts);
+  return std::tie(Name, Type, FilePath, Contexts) <
+         std::tie(Symbol.Name, Symbol.Type, Symbol.FilePath, Symbol.Contexts);
 }
 
 std::string SymbolInfo::getQualifiedName() const {

Modified: clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.h?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.h (original)
+++ clang-tools-extra/trunk/include-fixer/find-all-symbols/SymbolInfo.h Thu Mar  9 04:47:44 2017
@@ -20,7 +20,11 @@
 
 namespace clang {
 namespace find_all_symbols {
-/// \brief Contains all information for a Symbol.
+/// \brief Describes a named symbol from a header.
+/// Symbols with the same qualified name and type (e.g. function overloads)
+/// that appear in the same header are represented by a single SymbolInfo.
+///
+/// TODO: keep track of instances, e.g. overload locations and signatures.
 class SymbolInfo {
 public:
   /// \brief The SymbolInfo Type.
@@ -66,10 +70,10 @@ public:
 
   // The default constructor is required by YAML traits in
   // LLVM_YAML_IS_DOCUMENT_LIST_VECTOR.
-  SymbolInfo() : Type(SymbolKind::Unknown), LineNumber(-1) {}
+  SymbolInfo() : Type(SymbolKind::Unknown) {}
 
   SymbolInfo(llvm::StringRef Name, SymbolKind Type, llvm::StringRef FilePath,
-             int LineNumber, const std::vector<Context> &Contexts);
+             const std::vector<Context> &Contexts);
 
   void SetFilePath(llvm::StringRef Path) { FilePath = Path; }
 
@@ -90,9 +94,6 @@ public:
     return Contexts;
   }
 
-  /// \brief Get a 1-based line number of the symbol's declaration.
-  int getLineNumber() const { return LineNumber; }
-
   bool operator<(const SymbolInfo &Symbol) const;
 
   bool operator==(const SymbolInfo &Symbol) const;
@@ -121,9 +122,6 @@ private:
   ///
   /// If the symbol is declared in `TranslationUnitDecl`, it has no context.
   std::vector<Context> Contexts;
-
-  /// \brief The 1-based line number of of the symbol's declaration.
-  int LineNumber;
 };
 
 struct SymbolAndSignals {

Modified: clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp Thu Mar  9 04:47:44 2017
@@ -178,7 +178,7 @@ createSymbolIndexManager(StringRef FileP
       for (size_t I = 0, E = CommaSplits.size(); I != E; ++I)
         Symbols.push_back(
             {SymbolInfo(Split.first.trim(), SymbolInfo::SymbolKind::Unknown,
-                        CommaSplits[I].trim(), 1, {}),
+                        CommaSplits[I].trim(), {}),
              // Use fake "seen" signal for tests, so first header wins.
              SymbolInfo::Signals(/*Seen=*/static_cast<unsigned>(E - I),
                                  /*Used=*/0)});

Modified: clang-tools-extra/trunk/test/include-fixer/Inputs/fake_yaml_db.yaml
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/include-fixer/Inputs/fake_yaml_db.yaml?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/include-fixer/Inputs/fake_yaml_db.yaml (original)
+++ clang-tools-extra/trunk/test/include-fixer/Inputs/fake_yaml_db.yaml Thu Mar  9 04:47:44 2017
@@ -6,7 +6,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     b
 FilePath:        foo.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            0
@@ -18,7 +17,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     b
 FilePath:        ../include/bar.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            0
@@ -30,7 +28,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     b
 FilePath:        ../include/bar.h
-LineNumber:      2
 Type:            Class
 Seen:            3
 Used:            0
@@ -42,7 +39,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     b
 FilePath:        ../include/zbar.h
-LineNumber:      1
 Type:            Class
 Seen:            3
 Used:            0
@@ -50,7 +46,6 @@ Used:            0
 Name:           b
 Contexts:
 FilePath:        var.h
-LineNumber:      1
 Type:            Variable
 Seen:            1
 Used:            0
@@ -60,7 +55,6 @@ Contexts:
   - ContextType:    Namespace
     ContextName:    c
 FilePath:        test/include-fixer/baz.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            0

Modified: clang-tools-extra/trunk/test/include-fixer/Inputs/merge/a.yaml
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/include-fixer/Inputs/merge/a.yaml?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/include-fixer/Inputs/merge/a.yaml (original)
+++ clang-tools-extra/trunk/test/include-fixer/Inputs/merge/a.yaml Thu Mar  9 04:47:44 2017
@@ -4,7 +4,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        foo.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            1
@@ -15,7 +14,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        ../include/bar.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            2

Modified: clang-tools-extra/trunk/test/include-fixer/Inputs/merge/b.yaml
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/include-fixer/Inputs/merge/b.yaml?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/include-fixer/Inputs/merge/b.yaml (original)
+++ clang-tools-extra/trunk/test/include-fixer/Inputs/merge/b.yaml Thu Mar  9 04:47:44 2017
@@ -4,7 +4,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        foo.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            2
@@ -15,7 +14,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        ../include/barbar.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            0

Modified: clang-tools-extra/trunk/test/include-fixer/merge.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/include-fixer/merge.test?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/include-fixer/merge.test (original)
+++ clang-tools-extra/trunk/test/include-fixer/merge.test Thu Mar  9 04:47:44 2017
@@ -7,7 +7,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        ../include/bar.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            1
@@ -18,7 +17,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        ../include/barbar.h
-LineNumber:      1
 Type:            Class
 Seen:            1
 Used:            0
@@ -29,7 +27,6 @@ Contexts:
   - ContextType:     Namespace
     ContextName:     a
 FilePath:        foo.h
-LineNumber:      1
 Type:            Class
 Seen:            2
 Used:            2

Modified: clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp?rev=297371&r1=297370&r2=297371&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp Thu Mar  9 04:47:44 2017
@@ -54,43 +54,43 @@ static std::string runIncludeFixer(
     StringRef Code,
     const std::vector<std::string> &ExtraArgs = std::vector<std::string>()) {
   std::vector<SymbolAndSignals> Symbols = {
-      {SymbolInfo("string", SymbolInfo::SymbolKind::Class, "<string>", 1,
+      {SymbolInfo("string", SymbolInfo::SymbolKind::Class, "<string>",
                   {{SymbolInfo::ContextType::Namespace, "std"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("sting", SymbolInfo::SymbolKind::Class, "\"sting\"", 1,
+      {SymbolInfo("sting", SymbolInfo::SymbolKind::Class, "\"sting\"",
                   {{SymbolInfo::ContextType::Namespace, "std"}}),
        SymbolInfo::Signals{}},
       {SymbolInfo("foo", SymbolInfo::SymbolKind::Class,
-                  "\"dir/otherdir/qux.h\"", 1,
+                  "\"dir/otherdir/qux.h\"",
                   {{SymbolInfo::ContextType::Namespace, "b"},
                    {SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar.h\"", 1,
+      {SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar.h\"",
                   {{SymbolInfo::ContextType::Namespace, "b"},
                    {SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar2.h\"", 1,
+      {SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar2.h\"",
                   {{SymbolInfo::ContextType::Namespace, "c"},
                    {SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("Green", SymbolInfo::SymbolKind::Class, "\"color.h\"", 1,
+      {SymbolInfo("Green", SymbolInfo::SymbolKind::Class, "\"color.h\"",
                   {{SymbolInfo::ContextType::EnumDecl, "Color"},
                    {SymbolInfo::ContextType::Namespace, "b"},
                    {SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("Vector", SymbolInfo::SymbolKind::Class, "\"Vector.h\"", 1,
+      {SymbolInfo("Vector", SymbolInfo::SymbolKind::Class, "\"Vector.h\"",
                   {{SymbolInfo::ContextType::Namespace, "__a"},
                    {SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{/*Seen=*/2, 0}},
-      {SymbolInfo("Vector", SymbolInfo::SymbolKind::Class, "\"Vector.h\"", 2,
+      {SymbolInfo("Vector", SymbolInfo::SymbolKind::Class, "\"Vector.h\"",
                   {{SymbolInfo::ContextType::Namespace, "a"}}),
        SymbolInfo::Signals{/*Seen=*/2, 0}},
-      {SymbolInfo("StrCat", SymbolInfo::SymbolKind::Class, "\"strcat.h\"", 1,
+      {SymbolInfo("StrCat", SymbolInfo::SymbolKind::Class, "\"strcat.h\"",
                   {{SymbolInfo::ContextType::Namespace, "str"}}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("str", SymbolInfo::SymbolKind::Class, "\"str.h\"", 1, {}),
+      {SymbolInfo("str", SymbolInfo::SymbolKind::Class, "\"str.h\"", {}),
        SymbolInfo::Signals{}},
-      {SymbolInfo("foo2", SymbolInfo::SymbolKind::Class, "\"foo2.h\"", 1, {}),
+      {SymbolInfo("foo2", SymbolInfo::SymbolKind::Class, "\"foo2.h\"", {}),
        SymbolInfo::Signals{}},
   };
   auto SymbolIndexMgr = llvm::make_unique<SymbolIndexManager>();

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=297371&r1=297370&r2=297371&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 Thu Mar  9 04:47:44 2017
@@ -42,14 +42,14 @@ public:
       Symbols[Entry.first] += Entry.second;
   }
 
-  bool hasSymbol(const SymbolInfo &Symbol) const {
+  int seen(const SymbolInfo &Symbol) const {
     auto it = Symbols.find(Symbol);
-    return it != Symbols.end() && it->second.Seen > 0;
+    return it == Symbols.end() ? 0 : it->second.Seen;
   }
 
-  bool hasUse(const SymbolInfo &Symbol) const {
+  int used(const SymbolInfo &Symbol) const {
     auto it = Symbols.find(Symbol);
-    return it != Symbols.end() && it->second.Used > 0;
+    return it == Symbols.end() ? 0 : it->second.Used;
   }
 
 private:
@@ -58,11 +58,9 @@ private:
 
 class FindAllSymbolsTest : public ::testing::Test {
 public:
-  bool hasSymbol(const SymbolInfo &Symbol) {
-    return Reporter.hasSymbol(Symbol);
-  }
+  int seen(const SymbolInfo &Symbol) { return Reporter.seen(Symbol); }
 
-  bool hasUse(const SymbolInfo &Symbol) { return Reporter.hasUse(Symbol); }
+  int used(const SymbolInfo &Symbol) { return Reporter.used(Symbol); }
 
   bool runFindAllSymbols(StringRef HeaderCode, StringRef MainCode) {
     llvm::IntrusiveRefCntPtr<vfs::InMemoryFileSystem> InMemoryFileSystem(
@@ -86,9 +84,9 @@ public:
     std::string InternalCode =
         "#include \"private.inc\"\nclass Internal {};";
     SymbolInfo InternalSymbol("Internal", SymbolInfo::SymbolKind::Class,
-                              TopHeader, 2, {});
+                              TopHeader, {});
     SymbolInfo IncSymbol("IncHeaderClass", SymbolInfo::SymbolKind::Class,
-                         TopHeader, 1, {});
+                         TopHeader, {});
     InMemoryFileSystem->addFile(
         IncHeader, 0, llvm::MemoryBuffer::getMemBuffer(IncHeaderCode));
     InMemoryFileSystem->addFile(InternalHeader, 0,
@@ -120,19 +118,19 @@ public:
     InMemoryFileSystem->addFile(
         DirtyHeader, 0, llvm::MemoryBuffer::getMemBuffer(DirtyHeaderContent));
     SymbolInfo DirtyMacro("INTERNAL", SymbolInfo::SymbolKind::Macro,
-                          CleanHeader, 1, {});
+                          CleanHeader, {});
     SymbolInfo DirtySymbol("ExtraInternal", SymbolInfo::SymbolKind::Class,
-                           CleanHeader, 2, {});
+                           CleanHeader, {});
 #endif // _MSC_VER && __MINGW32__
     Content += "\n" + MainCode.str();
     InMemoryFileSystem->addFile(FileName, 0,
                                 llvm::MemoryBuffer::getMemBuffer(Content));
     Invocation.run();
-    EXPECT_TRUE(hasSymbol(InternalSymbol));
-    EXPECT_TRUE(hasSymbol(IncSymbol));
+    EXPECT_EQ(1, seen(InternalSymbol));
+    EXPECT_EQ(1, seen(IncSymbol));
 #if !defined(_MSC_VER) && !defined(__MINGW32__)
-    EXPECT_TRUE(hasSymbol(DirtySymbol));
-    EXPECT_TRUE(hasSymbol(DirtyMacro));
+    EXPECT_EQ(1, seen(DirtySymbol));
+    EXPECT_EQ(1, seen(DirtyMacro));
 #endif  // _MSC_VER && __MINGW32__
     return true;
   }
@@ -155,20 +153,20 @@ TEST_F(FindAllSymbolsTest, VariableSymbo
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("xargc", SymbolInfo::SymbolKind::Variable, HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("xargc", SymbolInfo::SymbolKind::Variable, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("SSSS", SymbolInfo::SymbolKind::Variable, HeaderName, 4,
+  Symbol = SymbolInfo("SSSS", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("XXXX", SymbolInfo::SymbolKind::Variable, HeaderName, 5,
+  Symbol = SymbolInfo("XXXX", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "nb"},
                        {SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, ExternCSymbols) {
@@ -188,14 +186,14 @@ TEST_F(FindAllSymbolsTest, ExternCSymbol
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("C_Func", SymbolInfo::SymbolKind::Function, HeaderName, 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("C_Func", SymbolInfo::SymbolKind::Function, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
   Symbol =
-      SymbolInfo("C_struct", SymbolInfo::SymbolKind::Class, HeaderName, 4, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("C_struct", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, CXXRecordSymbols) {
@@ -219,20 +217,20 @@ TEST_F(FindAllSymbolsTest, CXXRecordSymb
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("Glob", SymbolInfo::SymbolKind::Class, HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("Glob", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("A", SymbolInfo::SymbolKind::Class, HeaderName, 6,
+  Symbol = SymbolInfo("A", SymbolInfo::SymbolKind::Class, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("AAA", SymbolInfo::SymbolKind::Class, HeaderName, 7,
+  Symbol = SymbolInfo("AAA", SymbolInfo::SymbolKind::Class, HeaderName,
                       {{SymbolInfo::ContextType::Record, "A"},
                        {SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_FALSE(hasSymbol(Symbol));
-  EXPECT_FALSE(hasUse(Symbol));
+  EXPECT_EQ(0, seen(Symbol));
+  EXPECT_EQ(0, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, CXXRecordSymbolsTemplate) {
@@ -257,9 +255,9 @@ TEST_F(FindAllSymbolsTest, CXXRecordSymb
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("T_TEMP", SymbolInfo::SymbolKind::Class, HeaderName, 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("T_TEMP", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, DontIgnoreTemplatePartialSpecialization) {
@@ -274,14 +272,10 @@ TEST_F(FindAllSymbolsTest, DontIgnoreTem
       )";
   runFindAllSymbols(Code, "");
   SymbolInfo Symbol =
-      SymbolInfo("Class", SymbolInfo::SymbolKind::Class, HeaderName, 4, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  Symbol =
-      SymbolInfo("f", SymbolInfo::SymbolKind::Function, HeaderName, 7, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  Symbol =
-      SymbolInfo("f", SymbolInfo::SymbolKind::Function, HeaderName, 8, {});
-  EXPECT_FALSE(hasSymbol(Symbol));
+      SymbolInfo("Class", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  Symbol = SymbolInfo("f", SymbolInfo::SymbolKind::Function, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, FunctionSymbols) {
@@ -309,26 +303,26 @@ TEST_F(FindAllSymbolsTest, FunctionSymbo
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("gg", SymbolInfo::SymbolKind::Function, HeaderName, 3,
+      SymbolInfo("gg", SymbolInfo::SymbolKind::Function, HeaderName,
                  {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("f", SymbolInfo::SymbolKind::Function, HeaderName, 4,
+  Symbol = SymbolInfo("f", SymbolInfo::SymbolKind::Function, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("SSSFFF", SymbolInfo::SymbolKind::Function, HeaderName, 5,
+  Symbol = SymbolInfo("SSSFFF", SymbolInfo::SymbolKind::Function, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("fun", SymbolInfo::SymbolKind::Function, HeaderName, 10,
+  Symbol = SymbolInfo("fun", SymbolInfo::SymbolKind::Function, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "nb"},
                        {SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, NamespaceTest) {
@@ -350,31 +344,31 @@ TEST_F(FindAllSymbolsTest, NamespaceTest
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("X1", SymbolInfo::SymbolKind::Variable, HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("X1", SymbolInfo::SymbolKind::Variable, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("X2", SymbolInfo::SymbolKind::Variable, HeaderName, 3,
+  Symbol = SymbolInfo("X2", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, ""}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("X3", SymbolInfo::SymbolKind::Variable, HeaderName, 4,
+  Symbol = SymbolInfo("X3", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, ""},
                        {SymbolInfo::ContextType::Namespace, ""}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("X4", SymbolInfo::SymbolKind::Variable, HeaderName, 5,
+  Symbol = SymbolInfo("X4", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "nb"},
                        {SymbolInfo::ContextType::Namespace, ""}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("X5", SymbolInfo::SymbolKind::Variable, HeaderName, 6,
+  Symbol = SymbolInfo("X5", SymbolInfo::SymbolKind::Variable, HeaderName,
                       {{SymbolInfo::ContextType::Namespace, "na"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, DecayedTypeTest) {
@@ -382,9 +376,9 @@ TEST_F(FindAllSymbolsTest, DecayedTypeTe
   static const char Main[] = R"(int main() { DecayedFunc(nullptr, nullptr); })";
   runFindAllSymbols(Header, Main);
   SymbolInfo Symbol = SymbolInfo(
-      "DecayedFunc", SymbolInfo::SymbolKind::Function, HeaderName, 1, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      "DecayedFunc", SymbolInfo::SymbolKind::Function, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, CTypedefTest) {
@@ -402,19 +396,18 @@ TEST_F(FindAllSymbolsTest, CTypedefTest)
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol = SymbolInfo("size_t_", SymbolInfo::SymbolKind::TypedefName,
-                                 HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+                                 HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+
+  Symbol = SymbolInfo("X", SymbolInfo::SymbolKind::TypedefName, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
   Symbol =
-      SymbolInfo("X", SymbolInfo::SymbolKind::TypedefName, HeaderName, 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-
-  Symbol =
-      SymbolInfo("XX", SymbolInfo::SymbolKind::TypedefName, HeaderName, 4, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("XX", SymbolInfo::SymbolKind::TypedefName, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, EnumTest) {
@@ -438,57 +431,56 @@ TEST_F(FindAllSymbolsTest, EnumTest) {
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("Glob_E", SymbolInfo::SymbolKind::EnumDecl, HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_FALSE(hasUse(Symbol));
+      SymbolInfo("Glob_E", SymbolInfo::SymbolKind::EnumDecl, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(0, used(Symbol));
 
   Symbol =
-      SymbolInfo("G1", SymbolInfo::SymbolKind::EnumConstantDecl, HeaderName, 2,
+      SymbolInfo("G1", SymbolInfo::SymbolKind::EnumConstantDecl, HeaderName,
                  {{SymbolInfo::ContextType::EnumDecl, "Glob_E"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
   Symbol =
-      SymbolInfo("G2", SymbolInfo::SymbolKind::EnumConstantDecl, HeaderName, 2,
+      SymbolInfo("G2", SymbolInfo::SymbolKind::EnumConstantDecl, HeaderName,
                  {{SymbolInfo::ContextType::EnumDecl, "Glob_E"}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 
-  Symbol = SymbolInfo("Altitude", SymbolInfo::SymbolKind::EnumDecl, HeaderName,
-                      3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+  Symbol =
+      SymbolInfo("Altitude", SymbolInfo::SymbolKind::EnumDecl, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
   Symbol =
       SymbolInfo("high", SymbolInfo::SymbolKind::EnumConstantDecl, HeaderName,
-                 3, {{SymbolInfo::ContextType::EnumDecl, "Altitude"}});
-  EXPECT_FALSE(hasSymbol(Symbol));
-  EXPECT_FALSE(hasUse(Symbol));
+                 {{SymbolInfo::ContextType::EnumDecl, "Altitude"}});
+  EXPECT_EQ(0, seen(Symbol));
+  EXPECT_EQ(0, used(Symbol));
 
   Symbol = SymbolInfo("A1", SymbolInfo::SymbolKind::EnumConstantDecl,
-                      HeaderName, 4, {{SymbolInfo::ContextType::EnumDecl, ""}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+                      HeaderName, {{SymbolInfo::ContextType::EnumDecl, ""}});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
   Symbol = SymbolInfo("A2", SymbolInfo::SymbolKind::EnumConstantDecl,
-                      HeaderName, 4, {{SymbolInfo::ContextType::EnumDecl, ""}});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-  Symbol = SymbolInfo("", SymbolInfo::SymbolKind::EnumDecl, HeaderName, 4, {});
-  EXPECT_FALSE(hasSymbol(Symbol));
-  EXPECT_FALSE(hasUse(Symbol));
+                      HeaderName, {{SymbolInfo::ContextType::EnumDecl, ""}});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+  Symbol = SymbolInfo("", SymbolInfo::SymbolKind::EnumDecl, HeaderName, {});
+  EXPECT_EQ(0, seen(Symbol));
+  EXPECT_EQ(0, used(Symbol));
 
-  Symbol = SymbolInfo("A_ENUM", SymbolInfo::SymbolKind::EnumDecl, HeaderName, 7,
+  Symbol = SymbolInfo("A_ENUM", SymbolInfo::SymbolKind::EnumDecl, HeaderName,
                       {{SymbolInfo::ContextType::Record, "A"}});
-  EXPECT_FALSE(hasSymbol(Symbol));
-  EXPECT_FALSE(hasUse(Symbol));
+  EXPECT_EQ(0, seen(Symbol));
+  EXPECT_EQ(0, used(Symbol));
 
-  Symbol = SymbolInfo("X1", SymbolInfo::SymbolKind::EnumDecl, HeaderName, 7,
+  Symbol = SymbolInfo("X1", SymbolInfo::SymbolKind::EnumDecl, HeaderName,
                       {{SymbolInfo::ContextType::EnumDecl, "A_ENUM"},
                        {SymbolInfo::ContextType::Record, "A"}});
-  EXPECT_FALSE(hasSymbol(Symbol));
+  EXPECT_EQ(0, seen(Symbol));
 
-  Symbol =
-      SymbolInfo("DECL", SymbolInfo::SymbolKind::EnumDecl, HeaderName, 9, {});
-  EXPECT_FALSE(hasSymbol(Symbol));
+  Symbol = SymbolInfo("DECL", SymbolInfo::SymbolKind::EnumDecl, HeaderName, {});
+  EXPECT_EQ(0, seen(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, IWYUPrivatePragmaTest) {
@@ -503,9 +495,9 @@ TEST_F(FindAllSymbolsTest, IWYUPrivatePr
   runFindAllSymbols(Header, Main);
 
   SymbolInfo Symbol =
-      SymbolInfo("Bar", SymbolInfo::SymbolKind::Class, "bar.h", 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("Bar", SymbolInfo::SymbolKind::Class, "bar.h", {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, MacroTest) {
@@ -521,17 +513,17 @@ TEST_F(FindAllSymbolsTest, MacroTest) {
   )";
   runFindAllSymbols(Header, Main);
   SymbolInfo Symbol =
-      SymbolInfo("X", SymbolInfo::SymbolKind::Macro, HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-
-  Symbol = SymbolInfo("Y", SymbolInfo::SymbolKind::Macro, HeaderName, 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-
-  Symbol = SymbolInfo("MAX", SymbolInfo::SymbolKind::Macro, HeaderName, 4, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("X", SymbolInfo::SymbolKind::Macro, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+
+  Symbol = SymbolInfo("Y", SymbolInfo::SymbolKind::Macro, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+
+  Symbol = SymbolInfo("MAX", SymbolInfo::SymbolKind::Macro, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, MacroTestWithIWYU) {
@@ -548,17 +540,17 @@ TEST_F(FindAllSymbolsTest, MacroTestWith
   )";
   runFindAllSymbols(Header, Main);
   SymbolInfo Symbol =
-      SymbolInfo("X", SymbolInfo::SymbolKind::Macro, "bar.h", 3, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-
-  Symbol = SymbolInfo("Y", SymbolInfo::SymbolKind::Macro, "bar.h", 4, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
-
-  Symbol = SymbolInfo("MAX", SymbolInfo::SymbolKind::Macro, "bar.h", 5, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-  EXPECT_TRUE(hasUse(Symbol));
+      SymbolInfo("X", SymbolInfo::SymbolKind::Macro, "bar.h", {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+
+  Symbol = SymbolInfo("Y", SymbolInfo::SymbolKind::Macro, "bar.h", {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
+
+  Symbol = SymbolInfo("MAX", SymbolInfo::SymbolKind::Macro, "bar.h", {});
+  EXPECT_EQ(1, seen(Symbol));
+  EXPECT_EQ(1, used(Symbol));
 }
 
 TEST_F(FindAllSymbolsTest, NoFriendTest) {
@@ -569,17 +561,17 @@ TEST_F(FindAllSymbolsTest, NoFriendTest)
     };
   )";
   runFindAllSymbols(Header, "");
-  SymbolInfo Symbol = SymbolInfo("WorstFriend", SymbolInfo::SymbolKind::Class,
-                                 HeaderName, 2, {});
-  EXPECT_TRUE(hasSymbol(Symbol));
-
-  Symbol = SymbolInfo("Friend", SymbolInfo::SymbolKind::Function, HeaderName,
-                      3, {});
-  EXPECT_FALSE(hasSymbol(Symbol));
-
-  Symbol = SymbolInfo("BestFriend", SymbolInfo::SymbolKind::Class, HeaderName,
-                      4, {});
-  EXPECT_FALSE(hasSymbol(Symbol));
+  SymbolInfo Symbol =
+      SymbolInfo("WorstFriend", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(1, seen(Symbol));
+
+  Symbol =
+      SymbolInfo("Friend", SymbolInfo::SymbolKind::Function, HeaderName, {});
+  EXPECT_EQ(0, seen(Symbol));
+
+  Symbol =
+      SymbolInfo("BestFriend", SymbolInfo::SymbolKind::Class, HeaderName, {});
+  EXPECT_EQ(0, seen(Symbol));
 }
 
 } // namespace find_all_symbols




More information about the cfe-commits mailing list