sammccall updated this revision to Diff 392609. sammccall marked an inline comment as done. sammccall added a comment.
fix sigils Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D115243/new/ https://reviews.llvm.org/D115243 Files: clang-tools-extra/clangd/index/BackgroundIndexStorage.cpp clang-tools-extra/clangd/index/Serialization.cpp clang-tools-extra/clangd/index/Serialization.h clang-tools-extra/clangd/index/SymbolOrigin.cpp clang-tools-extra/clangd/index/SymbolOrigin.h clang-tools-extra/clangd/index/YAMLSerialization.cpp clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp clang-tools-extra/clangd/test/index-serialization/Inputs/sample.idx clang-tools-extra/clangd/tool/ClangdMain.cpp clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp clang-tools-extra/clangd/unittests/SerializationTests.cpp
Index: clang-tools-extra/clangd/unittests/SerializationTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/SerializationTests.cpp +++ clang-tools-extra/clangd/unittests/SerializationTests.cpp @@ -49,7 +49,6 @@ End: Line: 1 Column: 1 -Origin: 128 Flags: 129 Documentation: 'Foo doc' ReturnType: 'int' @@ -121,6 +120,10 @@ return (arg.IncludeHeader == IncludeHeader) && (arg.References == References); } +auto readIndexFile(llvm::StringRef Text) { + return readIndexFile(Text, SymbolOrigin::Static); +} + TEST(SerializationTest, NoCrashOnEmptyYAML) { EXPECT_TRUE(bool(readIndexFile(""))); } @@ -143,7 +146,7 @@ EXPECT_EQ(Sym1.Documentation, "Foo doc"); EXPECT_EQ(Sym1.ReturnType, "int"); EXPECT_EQ(StringRef(Sym1.CanonicalDeclaration.FileURI), "file:///path/foo.h"); - EXPECT_EQ(Sym1.Origin, static_cast<SymbolOrigin>(1 << 7)); + EXPECT_EQ(Sym1.Origin, SymbolOrigin::Static); EXPECT_EQ(static_cast<uint8_t>(Sym1.Flags), 129); EXPECT_TRUE(Sym1.Flags & Symbol::IndexedForCodeCompletion); EXPECT_FALSE(Sym1.Flags & Symbol::Deprecated); Index: clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp +++ clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp @@ -73,7 +73,8 @@ if (Storage.find(ShardIdentifier) == Storage.end()) { return nullptr; } - auto IndexFile = readIndexFile(Storage[ShardIdentifier]); + auto IndexFile = + readIndexFile(Storage[ShardIdentifier], SymbolOrigin::Background); if (!IndexFile) { ADD_FAILURE() << "Error while reading " << ShardIdentifier << ':' << IndexFile.takeError(); Index: clang-tools-extra/clangd/tool/ClangdMain.cpp =================================================================== --- clang-tools-extra/clangd/tool/ClangdMain.cpp +++ clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -586,7 +586,7 @@ auto NewIndex = std::make_unique<SwapIndex>(std::make_unique<MemIndex>()); auto IndexLoadTask = [File = External.Location, PlaceHolder = NewIndex.get()] { - if (auto Idx = loadIndex(File, /*UseDex=*/true)) + if (auto Idx = loadIndex(File, SymbolOrigin::Static, /*UseDex=*/true)) PlaceHolder->reset(std::move(Idx)); }; if (Tasks) { Index: clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp =================================================================== --- clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp +++ clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp @@ -334,7 +334,8 @@ } // Auto-detects input format when parsing - auto IndexIn = clang::clangd::readIndexFile(Buffer->get()->getBuffer()); + auto IndexIn = clang::clangd::readIndexFile(Buffer->get()->getBuffer(), + SymbolOrigin::Static); if (!IndexIn) { llvm::errs() << llvm::toString(IndexIn.takeError()) << "\n"; return; @@ -374,7 +375,7 @@ return Index.startswith("remote:") ? remote::getClient(Index.drop_front(strlen("remote:")), ProjectRoot) - : loadIndex(Index, /*UseDex=*/true); + : loadIndex(Index, SymbolOrigin::Static, /*UseDex=*/true); } bool runCommand(std::string Request, const SymbolIndex &Index) { Index: clang-tools-extra/clangd/index/YAMLSerialization.cpp =================================================================== --- clang-tools-extra/clangd/index/YAMLSerialization.cpp +++ clang-tools-extra/clangd/index/YAMLSerialization.cpp @@ -69,7 +69,6 @@ using clang::clangd::Symbol; using clang::clangd::SymbolID; using clang::clangd::SymbolLocation; -using clang::clangd::SymbolOrigin; using clang::index::SymbolInfo; using clang::index::SymbolKind; using clang::index::SymbolLanguage; @@ -108,17 +107,6 @@ uint8_t Flag = 0; }; -struct NormalizedSymbolOrigin { - NormalizedSymbolOrigin(IO &) {} - NormalizedSymbolOrigin(IO &, SymbolOrigin O) { - Origin = static_cast<uint8_t>(O); - } - - SymbolOrigin denormalize(IO &) { return static_cast<SymbolOrigin>(Origin); } - - uint8_t Origin = 0; -}; - template <> struct MappingTraits<YPosition> { static void mapping(IO &IO, YPosition &Value) { IO.mapRequired("Line", Value.Line); @@ -194,8 +182,6 @@ MappingNormalization<NormalizedSymbolID, SymbolID> NSymbolID(IO, Sym.ID); MappingNormalization<NormalizedSymbolFlag, Symbol::SymbolFlag> NSymbolFlag( IO, Sym.Flags); - MappingNormalization<NormalizedSymbolOrigin, SymbolOrigin> NSymbolOrigin( - IO, Sym.Origin); IO.mapRequired("ID", NSymbolID->HexString); IO.mapRequired("Name", Sym.Name); IO.mapRequired("Scope", Sym.Scope); @@ -204,7 +190,6 @@ SymbolLocation()); IO.mapOptional("Definition", Sym.Definition, SymbolLocation()); IO.mapOptional("References", Sym.References, 0u); - IO.mapOptional("Origin", NSymbolOrigin->Origin); IO.mapOptional("Flags", NSymbolFlag->Flag); IO.mapOptional("Signature", Sym.Signature); IO.mapOptional("TemplateSpecializationArgs", @@ -436,7 +421,8 @@ } } -llvm::Expected<IndexFileIn> readYAML(llvm::StringRef Data) { +llvm::Expected<IndexFileIn> readYAML(llvm::StringRef Data, + SymbolOrigin Origin) { SymbolSlab::Builder Symbols; RefSlab::Builder Refs; RelationSlab::Builder Relations; @@ -453,8 +439,10 @@ if (Yin.error()) return llvm::errorCodeToError(Yin.error()); - if (Variant.Symbol) + if (Variant.Symbol) { + Variant.Symbol->Origin = Origin; Symbols.insert(*Variant.Symbol); + } if (Variant.Refs) for (const auto &Ref : Variant.Refs->second) Refs.insert(Variant.Refs->first, Ref); @@ -528,25 +516,5 @@ return Buf; } -llvm::Expected<clangd::Symbol> -symbolFromYAML(StringRef YAML, llvm::UniqueStringSaver *Strings) { - clangd::Symbol Deserialized; - llvm::yaml::Input YAMLInput(YAML, Strings); - if (YAMLInput.error()) - return error("Unable to deserialize Symbol from YAML: {0}", YAML); - YAMLInput >> Deserialized; - return Deserialized; -} - -llvm::Expected<clangd::Ref> refFromYAML(StringRef YAML, - llvm::UniqueStringSaver *Strings) { - clangd::Ref Deserialized; - llvm::yaml::Input YAMLInput(YAML, Strings); - if (YAMLInput.error()) - return error("Unable to deserialize Symbol from YAML: {0}", YAML); - YAMLInput >> Deserialized; - return Deserialized; -} - } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/index/SymbolOrigin.h =================================================================== --- clang-tools-extra/clangd/index/SymbolOrigin.h +++ clang-tools-extra/clangd/index/SymbolOrigin.h @@ -18,27 +18,29 @@ // Describes the source of information about a symbol. // Mainly useful for debugging, e.g. understanding code completion results. // This is a bitfield as information can be combined from several sources. -enum class SymbolOrigin : uint8_t { +enum class SymbolOrigin : uint16_t { Unknown = 0, AST = 1 << 0, // Directly from the AST (indexes should not set this). - Dynamic = 1 << 1, // From the dynamic index of opened files. - Static = 1 << 2, // From the static, externally-built index. + Open = 1 << 1, // From the dynamic index of open files. + Static = 1 << 2, // From a static, externally-built index. Merge = 1 << 3, // A non-trivial index merge was performed. Identifier = 1 << 4, // Raw identifiers in file. Remote = 1 << 5, // Remote index. - // Remaining bits reserved for index implementations. + Preamble = 1 << 6, // From the dynamic index of preambles. + // 7 reserved + Background = 1 << 8, // From the automatic project index. }; inline SymbolOrigin operator|(SymbolOrigin A, SymbolOrigin B) { - return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) | - static_cast<uint8_t>(B)); + return static_cast<SymbolOrigin>(static_cast<uint16_t>(A) | + static_cast<uint16_t>(B)); } inline SymbolOrigin &operator|=(SymbolOrigin &A, SymbolOrigin B) { return A = A | B; } inline SymbolOrigin operator&(SymbolOrigin A, SymbolOrigin B) { - return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) & - static_cast<uint8_t>(B)); + return static_cast<SymbolOrigin>(static_cast<uint16_t>(A) & + static_cast<uint16_t>(B)); } llvm::raw_ostream &operator<<(llvm::raw_ostream &, SymbolOrigin); Index: clang-tools-extra/clangd/index/SymbolOrigin.cpp =================================================================== --- clang-tools-extra/clangd/index/SymbolOrigin.cpp +++ clang-tools-extra/clangd/index/SymbolOrigin.cpp @@ -14,9 +14,9 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, SymbolOrigin O) { if (O == SymbolOrigin::Unknown) return OS << "unknown"; - constexpr static char Sigils[] = "ADSMIR67"; + constexpr static char Sigils[] = "AOSMIRP7B9012345"; for (unsigned I = 0; I < sizeof(Sigils); ++I) - if (static_cast<uint8_t>(O) & 1u << I) + if (static_cast<uint16_t>(O) & 1u << I) OS << Sigils[I]; return OS; } Index: clang-tools-extra/clangd/index/Serialization.h =================================================================== --- clang-tools-extra/clangd/index/Serialization.h +++ clang-tools-extra/clangd/index/Serialization.h @@ -49,7 +49,7 @@ llvm::Optional<tooling::CompileCommand> Cmd; }; // Parse an index file. The input must be a RIFF or YAML file. -llvm::Expected<IndexFileIn> readIndexFile(llvm::StringRef); +llvm::Expected<IndexFileIn> readIndexFile(llvm::StringRef, SymbolOrigin); // Specifies the contents of an index file to be written. struct IndexFileOut { @@ -79,16 +79,10 @@ std::string toYAML(const Relation &); std::string toYAML(const Ref &); -// Deserialize a single symbol from YAML. -llvm::Expected<clangd::Symbol> symbolFromYAML(StringRef YAML, - llvm::UniqueStringSaver *Strings); -llvm::Expected<clangd::Ref> refFromYAML(StringRef YAML, - llvm::UniqueStringSaver *Strings); - // Build an in-memory static index from an index file. // The size should be relatively small, so data can be managed in memory. std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef Filename, - bool UseDex = true); + SymbolOrigin Origin, bool UseDex = true); } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/index/Serialization.cpp =================================================================== --- clang-tools-extra/clangd/index/Serialization.cpp +++ clang-tools-extra/clangd/index/Serialization.cpp @@ -320,7 +320,6 @@ writeLocation(Sym.CanonicalDeclaration, Strings, OS); writeVar(Sym.References, OS); OS.write(static_cast<uint8_t>(Sym.Flags)); - OS.write(static_cast<uint8_t>(Sym.Origin)); writeVar(Strings.index(Sym.Signature), OS); writeVar(Strings.index(Sym.CompletionSnippetSuffix), OS); writeVar(Strings.index(Sym.Documentation), OS); @@ -336,7 +335,8 @@ WriteInclude(Include); } -Symbol readSymbol(Reader &Data, llvm::ArrayRef<llvm::StringRef> Strings) { +Symbol readSymbol(Reader &Data, llvm::ArrayRef<llvm::StringRef> Strings, + SymbolOrigin Origin) { Symbol Sym; Sym.ID = Data.consumeID(); Sym.SymInfo.Kind = static_cast<index::SymbolKind>(Data.consume8()); @@ -348,7 +348,7 @@ Sym.CanonicalDeclaration = readLocation(Data, Strings); Sym.References = Data.consumeVar(); Sym.Flags = static_cast<Symbol::SymbolFlag>(Data.consume8()); - Sym.Origin = static_cast<SymbolOrigin>(Data.consume8()); + Sym.Origin = Origin; Sym.Signature = Data.consumeString(Strings); Sym.CompletionSnippetSuffix = Data.consumeString(Strings); Sym.Documentation = Data.consumeString(Strings); @@ -452,9 +452,10 @@ // The current versioning scheme is simple - non-current versions are rejected. // If you make a breaking change, bump this version number to invalidate stored // data. Later we may want to support some backward compatibility. -constexpr static uint32_t Version = 16; +constexpr static uint32_t Version = 17; -llvm::Expected<IndexFileIn> readRIFF(llvm::StringRef Data) { +llvm::Expected<IndexFileIn> readRIFF(llvm::StringRef Data, + SymbolOrigin Origin) { auto RIFF = riff::readFile(Data); if (!RIFF) return RIFF.takeError(); @@ -503,7 +504,7 @@ Reader SymbolReader(Chunks.lookup("symb")); SymbolSlab::Builder Symbols; while (!SymbolReader.eof()) - Symbols.insert(readSymbol(SymbolReader, Strings->Strings)); + Symbols.insert(readSymbol(SymbolReader, Strings->Strings, Origin)); if (SymbolReader.err()) return error("malformed or truncated symbol"); Result.Symbols = std::move(Symbols).build(); @@ -670,7 +671,7 @@ // Defined in YAMLSerialization.cpp. void writeYAML(const IndexFileOut &, llvm::raw_ostream &); -llvm::Expected<IndexFileIn> readYAML(llvm::StringRef); +llvm::Expected<IndexFileIn> readYAML(llvm::StringRef, SymbolOrigin Origin); llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const IndexFileOut &O) { switch (O.Format) { @@ -684,11 +685,12 @@ return OS; } -llvm::Expected<IndexFileIn> readIndexFile(llvm::StringRef Data) { +llvm::Expected<IndexFileIn> readIndexFile(llvm::StringRef Data, + SymbolOrigin Origin) { if (Data.startswith("RIFF")) { - return readRIFF(Data); + return readRIFF(Data, Origin); } - if (auto YAMLContents = readYAML(Data)) { + if (auto YAMLContents = readYAML(Data, Origin)) { return std::move(*YAMLContents); } else { return error("Not a RIFF file and failed to parse as YAML: {0}", @@ -697,7 +699,7 @@ } std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef SymbolFilename, - bool UseDex) { + SymbolOrigin Origin, bool UseDex) { trace::Span OverallTracer("LoadIndex"); auto Buffer = llvm::MemoryBuffer::getFile(SymbolFilename); if (!Buffer) { @@ -710,7 +712,7 @@ RelationSlab Relations; { trace::Span Tracer("ParseIndex"); - if (auto I = readIndexFile(Buffer->get()->getBuffer())) { + if (auto I = readIndexFile(Buffer->get()->getBuffer(), Origin)) { if (I->Symbols) Symbols = std::move(*I->Symbols); if (I->Refs) Index: clang-tools-extra/clangd/index/BackgroundIndexStorage.cpp =================================================================== --- clang-tools-extra/clangd/index/BackgroundIndexStorage.cpp +++ clang-tools-extra/clangd/index/BackgroundIndexStorage.cpp @@ -58,7 +58,8 @@ auto Buffer = llvm::MemoryBuffer::getFile(ShardPath); if (!Buffer) return nullptr; - if (auto I = readIndexFile(Buffer->get()->getBuffer())) + if (auto I = + readIndexFile(Buffer->get()->getBuffer(), SymbolOrigin::Background)) return std::make_unique<IndexFileIn>(std::move(*I)); else elog("Error while reading shard {0}: {1}", ShardIdentifier,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits