diff options
| author | Kirill Bobyrev <kbobyrev.opensource@gmail.com> | 2018-09-04 15:10:40 +0000 |
|---|---|---|
| committer | Kirill Bobyrev <kbobyrev.opensource@gmail.com> | 2018-09-04 15:10:40 +0000 |
| commit | d5bc65444ccf841b3fff9062d3acebb94da24cc3 (patch) | |
| tree | 6abfbc1d82974a6915ce6b2d36a8268703ed7602 | |
| parent | b0138317d6aa9bb596cf067b6c0ab4e705e8774e (diff) | |
| download | bcm5719-llvm-d5bc65444ccf841b3fff9062d3acebb94da24cc3.tar.gz bcm5719-llvm-d5bc65444ccf841b3fff9062d3acebb94da24cc3.zip | |
[clangd] Move buildStaticIndex() to SymbolYAML
`buildStaticIndex()` is used by two other tools that I'm building, now
it's useful outside of `tool/ClangdMain.cpp`.
Also, slightly refactor the code while moving it to the different source
file.
Reviewed By: sammccall
Differential Revision: https://reviews.llvm.org/D51626
llvm-svn: 341369
| -rw-r--r-- | clang-tools-extra/clangd/index/SymbolYAML.cpp | 22 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/index/SymbolYAML.h | 6 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/tool/ClangdMain.cpp | 20 |
3 files changed, 25 insertions, 23 deletions
diff --git a/clang-tools-extra/clangd/index/SymbolYAML.cpp b/clang-tools-extra/clangd/index/SymbolYAML.cpp index d3947fa1416..8db4845f162 100644 --- a/clang-tools-extra/clangd/index/SymbolYAML.cpp +++ b/clang-tools-extra/clangd/index/SymbolYAML.cpp @@ -9,6 +9,7 @@ #include "SymbolYAML.h" #include "Index.h" +#include "dex/DexIndex.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Errc.h" @@ -25,18 +26,18 @@ using clang::clangd::Symbol; using clang::clangd::SymbolID; using clang::clangd::SymbolLocation; using clang::index::SymbolInfo; -using clang::index::SymbolLanguage; using clang::index::SymbolKind; +using clang::index::SymbolLanguage; // Helper to (de)serialize the SymbolID. We serialize it as a hex string. struct NormalizedSymbolID { NormalizedSymbolID(IO &) {} - NormalizedSymbolID(IO &, const SymbolID& ID) { + NormalizedSymbolID(IO &, const SymbolID &ID) { llvm::raw_string_ostream OS(HexString); OS << ID; } - SymbolID denormalize(IO&) { + SymbolID denormalize(IO &) { SymbolID ID; HexString >> ID; return ID; @@ -167,7 +168,7 @@ Symbol SymbolFromYAML(llvm::yaml::Input &Input) { return S; } -void SymbolsToYAML(const SymbolSlab& Symbols, llvm::raw_ostream &OS) { +void SymbolsToYAML(const SymbolSlab &Symbols, llvm::raw_ostream &OS) { llvm::yaml::Output Yout(OS); for (Symbol S : Symbols) // copy: Yout<< requires mutability. Yout << S; @@ -181,5 +182,18 @@ std::string SymbolToYAML(Symbol Sym) { return OS.str(); } +std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef SymbolFile, + bool UseDex) { + auto Buffer = llvm::MemoryBuffer::getFile(SymbolFile); + if (!Buffer) { + llvm::errs() << "Can't open " << SymbolFile << "\n"; + return nullptr; + } + auto Slab = symbolsFromYAML(Buffer.get()->getBuffer()); + + return UseDex ? dex::DexIndex::build(std::move(Slab)) + : MemIndex::build(std::move(Slab), RefSlab()); +} + } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/clangd/index/SymbolYAML.h b/clang-tools-extra/clangd/index/SymbolYAML.h index 897b1b7c6d8..1af51c075ee 100644 --- a/clang-tools-extra/clangd/index/SymbolYAML.h +++ b/clang-tools-extra/clangd/index/SymbolYAML.h @@ -41,6 +41,12 @@ std::string SymbolToYAML(Symbol Sym); // The YAML result is safe to concatenate if you have multiple symbol slabs. void SymbolsToYAML(const SymbolSlab &Symbols, llvm::raw_ostream &OS); +// Build an in-memory static index for global symbols from a symbol file. +// The size of global symbols should be relatively small, so that all symbols +// can be managed in memory. +std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef SymbolFile, + bool UseDex = true); + } // namespace clangd } // namespace clang diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp index c9ceb9aa859..a71f0b6f860 100644 --- a/clang-tools-extra/clangd/tool/ClangdMain.cpp +++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -39,24 +39,6 @@ namespace { enum class PCHStorageFlag { Disk, Memory }; -// Build an in-memory static index for global symbols from a YAML-format file. -// The size of global symbols should be relatively small, so that all symbols -// can be managed in memory. -std::unique_ptr<SymbolIndex> buildStaticIndex(llvm::StringRef YamlSymbolFile) { - auto Buffer = llvm::MemoryBuffer::getFile(YamlSymbolFile); - if (!Buffer) { - llvm::errs() << "Can't open " << YamlSymbolFile << "\n"; - return nullptr; - } - auto Slab = symbolsFromYAML(Buffer.get()->getBuffer()); - SymbolSlab::Builder SymsBuilder; - for (auto Sym : Slab) - SymsBuilder.insert(Sym); - - return UseDex ? dex::DexIndex::build(std::move(SymsBuilder).build()) - : MemIndex::build(std::move(SymsBuilder).build(), RefSlab()); -} - } // namespace static llvm::cl::opt<Path> CompileCommandsDir( @@ -298,7 +280,7 @@ int main(int argc, char *argv[]) { Opts.BuildDynamicSymbolIndex = EnableIndex; std::unique_ptr<SymbolIndex> StaticIdx; if (EnableIndex && !YamlSymbolFile.empty()) { - StaticIdx = buildStaticIndex(YamlSymbolFile); + StaticIdx = loadIndex(YamlSymbolFile, UseDex); Opts.StaticIndex = StaticIdx.get(); } Opts.AsyncThreadsCount = WorkerThreadsCount; |

