diff --git a/clang-tools-extra/clangd/index/SymbolOrigin.h b/clang-tools-extra/clangd/index/SymbolOrigin.h --- a/clang-tools-extra/clangd/index/SymbolOrigin.h +++ b/clang-tools-extra/clangd/index/SymbolOrigin.h @@ -25,6 +25,7 @@ Static = 1 << 2, // From the 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. }; diff --git a/clang-tools-extra/clangd/index/SymbolOrigin.cpp b/clang-tools-extra/clangd/index/SymbolOrigin.cpp --- a/clang-tools-extra/clangd/index/SymbolOrigin.cpp +++ b/clang-tools-extra/clangd/index/SymbolOrigin.cpp @@ -14,7 +14,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, SymbolOrigin O) { if (O == SymbolOrigin::Unknown) return OS << "unknown"; - constexpr static char Sigils[] = "ADSMI567"; + constexpr static char Sigils[] = "ADSMIR67"; for (unsigned I = 0; I < sizeof(Sigils); ++I) if (static_cast(O) & 1u << I) OS << Sigils[I]; diff --git a/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp b/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp --- a/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp +++ b/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp @@ -161,7 +161,8 @@ return Declaration.takeError(); Result.CanonicalDeclaration = *Declaration; Result.References = Message.references(); - Result.Origin = static_cast(Message.origin()); + // Overwrite symbol origin: it's coming from remote index. + Result.Origin = clangd::SymbolOrigin::Remote; Result.Signature = Message.signature(); Result.TemplateSpecializationArgs = Message.template_specialization_args(); Result.CompletionSnippetSuffix = Message.completion_snippet_suffix(); diff --git a/clang-tools-extra/clangd/unittests/remote/MarshallingTests.cpp b/clang-tools-extra/clangd/unittests/remote/MarshallingTests.cpp --- a/clang-tools-extra/clangd/unittests/remote/MarshallingTests.cpp +++ b/clang-tools-extra/clangd/unittests/remote/MarshallingTests.cpp @@ -16,6 +16,7 @@ #include "index/Symbol.h" #include "index/SymbolID.h" #include "index/SymbolLocation.h" +#include "index/SymbolOrigin.h" #include "index/remote/marshalling/Marshalling.h" #include "clang/Index/IndexSymbol.h" #include "llvm/ADT/SmallString.h" @@ -154,6 +155,8 @@ ASSERT_TRUE(bool(Serialized)); auto Deserialized = ProtobufMarshaller.fromProtobuf(*Serialized); ASSERT_TRUE(bool(Deserialized)); + // Origin is overwritten when deserializing. + Sym.Origin = SymbolOrigin::Remote; EXPECT_EQ(toYAML(Sym), toYAML(*Deserialized)); // Serialized paths are relative and have UNIX slashes. EXPECT_EQ(convert_to_slash(Serialized->definition().file_path(), @@ -258,6 +261,7 @@ Sym.IncludeHeaders.size()); auto Deserialized = ProtobufMarshaller.fromProtobuf(*Serialized); ASSERT_TRUE(bool(Deserialized)); + Sym.Origin = SymbolOrigin::Remote; EXPECT_EQ(toYAML(Sym), toYAML(*Deserialized)); // This is an absolute path to a header: can not be transmitted over the wire.