This revision was automatically updated to reflect the committed changes.
Closed by commit rL322722: [clangd] Deduplicate symbols collected in 
global-symbol-builder tool. (authored by ioeric, committed by ).
Herald added a subscriber: llvm-commits.

Repository:
  rL LLVM

https://reviews.llvm.org/D42113

Files:
  
clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp


Index: 
clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
===================================================================
--- 
clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
+++ 
clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
@@ -105,7 +105,22 @@
     llvm::errs() << llvm::toString(std::move(Err)) << "\n";
   }
 
+  // Deduplicate the result by key and keep the longest value.
+  // FIXME(ioeric): Merge occurrences, rather than just dropping all but one.
+  // Definitions and forward declarations have the same key and may both have
+  // information. Usage count will need to be aggregated across occurrences,
+  // too.
+  llvm::StringMap<llvm::StringRef> UniqueSymbols;
   Executor->get()->getToolResults()->forEachResult(
-      [](llvm::StringRef, llvm::StringRef Value) { llvm::outs() << Value; });
+      [&UniqueSymbols](llvm::StringRef Key, llvm::StringRef Value) {
+        auto Ret = UniqueSymbols.try_emplace(Key, Value);
+        if (!Ret.second) {
+          // If key already exists, keep the longest value.
+          llvm::StringRef &V = Ret.first->second;
+          V = V.size() < Value.size() ? Value : V;
+        }
+      });
+  for (const auto &Sym : UniqueSymbols)
+    llvm::outs() << Sym.second;
   return 0;
 }


Index: clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
===================================================================
--- clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
+++ clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
@@ -105,7 +105,22 @@
     llvm::errs() << llvm::toString(std::move(Err)) << "\n";
   }
 
+  // Deduplicate the result by key and keep the longest value.
+  // FIXME(ioeric): Merge occurrences, rather than just dropping all but one.
+  // Definitions and forward declarations have the same key and may both have
+  // information. Usage count will need to be aggregated across occurrences,
+  // too.
+  llvm::StringMap<llvm::StringRef> UniqueSymbols;
   Executor->get()->getToolResults()->forEachResult(
-      [](llvm::StringRef, llvm::StringRef Value) { llvm::outs() << Value; });
+      [&UniqueSymbols](llvm::StringRef Key, llvm::StringRef Value) {
+        auto Ret = UniqueSymbols.try_emplace(Key, Value);
+        if (!Ret.second) {
+          // If key already exists, keep the longest value.
+          llvm::StringRef &V = Ret.first->second;
+          V = V.size() < Value.size() ? Value : V;
+        }
+      });
+  for (const auto &Sym : UniqueSymbols)
+    llvm::outs() << Sym.second;
   return 0;
 }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to