Index: clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp =================================================================== --- clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp +++ clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp @@ -78,10 +78,7 @@ auto Symbols = Collector->takeSymbols(); for (const auto &Sym : Symbols) { - std::string IDStr; - llvm::raw_string_ostream OS(IDStr); - OS << Sym.ID; - Ctx->reportResult(OS.str(), SymbolToYAML(Sym)); + Ctx->reportResult(Sym.ID.str(), SymbolToYAML(Sym)); } } Index: clangd/index/Index.h =================================================================== --- clangd/index/Index.h +++ clangd/index/Index.h @@ -69,6 +69,9 @@ return HashValue < Sym.HashValue; } + // Returns a 40-bytes hex encoded string. + std::string str() const; + private: static constexpr unsigned HashByteLength = 20; Index: clangd/index/Index.cpp =================================================================== --- clangd/index/Index.cpp +++ clangd/index/Index.cpp @@ -31,6 +31,13 @@ return OS; } +std::string SymbolID::str() const { + std::string ID; + llvm::raw_string_ostream OS(ID); + OS << *this; + return OS.str(); +} + void operator>>(StringRef Str, SymbolID &ID) { std::string HexString = fromHex(Str); assert(HexString.size() == ID.HashValue.size());