[clang-tools-extra] r322722 - [clangd] Deduplicate symbols collected in global-symbol-builder tool.
Eric Liu via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 17 10:27:41 PST 2018
Author: ioeric
Date: Wed Jan 17 10:27:41 2018
New Revision: 322722
URL: http://llvm.org/viewvc/llvm-project?rev=322722&view=rev
Log:
[clangd] Deduplicate symbols collected in global-symbol-builder tool.
Summary: After D42111, the executor framework no longer deduplicate tool results.
Reviewers: bkramer, sammccall
Subscribers: klimek, ilya-biryukov, cfe-commits
Differential Revision: https://reviews.llvm.org/D42113
Modified:
clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
Modified: clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp?rev=322722&r1=322721&r2=322722&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp (original)
+++ clang-tools-extra/trunk/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp Wed Jan 17 10:27:41 2018
@@ -105,7 +105,22 @@ int main(int argc, const char **argv) {
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;
}
More information about the cfe-commits
mailing list