[clangd] Drop version from remote index proto names, fix clangd-index-server

We only need to version these messages if they actually diverge.
Unlike the service, the namespace name isn't part of the wire format.

clangd-index-server was broken by 81e5f298c4
as the namespace names weren't updated there, this fixes it (by adding
them for the service, and not requiring them elsewhere).
This commit is contained in:
Sam McCall 2020-10-23 15:26:24 +02:00
parent c6561ccfd9
commit ce63383e45
5 changed files with 62 additions and 68 deletions

View File

@ -8,7 +8,7 @@
syntax = "proto2";
package clang.clangd.remote.v1;
package clang.clangd.remote;
message LookupRequest { repeated string ids = 1; }

View File

@ -76,7 +76,7 @@ Marshaller::Marshaller(llvm::StringRef RemoteIndexRoot,
}
llvm::Expected<clangd::LookupRequest>
Marshaller::fromProtobuf(const v1::LookupRequest *Message) {
Marshaller::fromProtobuf(const LookupRequest *Message) {
clangd::LookupRequest Req;
auto IDs = getIDs(Message->ids());
if (!IDs)
@ -86,7 +86,7 @@ Marshaller::fromProtobuf(const v1::LookupRequest *Message) {
}
llvm::Expected<clangd::FuzzyFindRequest>
Marshaller::fromProtobuf(const v1::FuzzyFindRequest *Message) {
Marshaller::fromProtobuf(const FuzzyFindRequest *Message) {
assert(!RemoteIndexRoot.empty());
clangd::FuzzyFindRequest Result;
Result.Query = Message->query();
@ -110,7 +110,7 @@ Marshaller::fromProtobuf(const v1::FuzzyFindRequest *Message) {
}
llvm::Expected<clangd::RefsRequest>
Marshaller::fromProtobuf(const v1::RefsRequest *Message) {
Marshaller::fromProtobuf(const RefsRequest *Message) {
clangd::RefsRequest Req;
auto IDs = getIDs(Message->ids());
if (!IDs)
@ -126,7 +126,7 @@ Marshaller::fromProtobuf(const v1::RefsRequest *Message) {
}
llvm::Expected<clangd::RelationsRequest>
Marshaller::fromProtobuf(const v1::RelationsRequest *Message) {
Marshaller::fromProtobuf(const RelationsRequest *Message) {
clangd::RelationsRequest Req;
auto IDs = getIDs(Message->subjects());
if (!IDs)
@ -140,8 +140,7 @@ Marshaller::fromProtobuf(const v1::RelationsRequest *Message) {
return Req;
}
llvm::Expected<clangd::Symbol>
Marshaller::fromProtobuf(const v1::Symbol &Message) {
llvm::Expected<clangd::Symbol> Marshaller::fromProtobuf(const Symbol &Message) {
if (!Message.has_info() || !Message.has_canonical_declaration())
return error("Missing info or declaration.");
clangd::Symbol Result;
@ -179,7 +178,7 @@ Marshaller::fromProtobuf(const v1::Symbol &Message) {
return Result;
}
llvm::Expected<clangd::Ref> Marshaller::fromProtobuf(const v1::Ref &Message) {
llvm::Expected<clangd::Ref> Marshaller::fromProtobuf(const Ref &Message) {
if (!Message.has_location())
return error("Missing location.");
clangd::Ref Result;
@ -192,7 +191,7 @@ llvm::Expected<clangd::Ref> Marshaller::fromProtobuf(const v1::Ref &Message) {
}
llvm::Expected<std::pair<clangd::SymbolID, clangd::Symbol>>
Marshaller::fromProtobuf(const v1::Relation &Message) {
Marshaller::fromProtobuf(const Relation &Message) {
auto SubjectID = SymbolID::fromStr(Message.subject_id());
if (!SubjectID)
return SubjectID.takeError();
@ -204,17 +203,16 @@ Marshaller::fromProtobuf(const v1::Relation &Message) {
return std::make_pair(*SubjectID, *Object);
}
v1::LookupRequest Marshaller::toProtobuf(const clangd::LookupRequest &From) {
v1::LookupRequest RPCRequest;
LookupRequest Marshaller::toProtobuf(const clangd::LookupRequest &From) {
LookupRequest RPCRequest;
for (const auto &SymbolID : From.IDs)
RPCRequest.add_ids(SymbolID.str());
return RPCRequest;
}
v1::FuzzyFindRequest
Marshaller::toProtobuf(const clangd::FuzzyFindRequest &From) {
FuzzyFindRequest Marshaller::toProtobuf(const clangd::FuzzyFindRequest &From) {
assert(!LocalIndexRoot.empty());
v1::FuzzyFindRequest RPCRequest;
FuzzyFindRequest RPCRequest;
RPCRequest.set_query(From.Query);
for (const auto &Scope : From.Scopes)
RPCRequest.add_scopes(Scope);
@ -233,8 +231,8 @@ Marshaller::toProtobuf(const clangd::FuzzyFindRequest &From) {
return RPCRequest;
}
v1::RefsRequest Marshaller::toProtobuf(const clangd::RefsRequest &From) {
v1::RefsRequest RPCRequest;
RefsRequest Marshaller::toProtobuf(const clangd::RefsRequest &From) {
RefsRequest RPCRequest;
for (const auto &ID : From.IDs)
RPCRequest.add_ids(ID.str());
RPCRequest.set_filter(static_cast<uint32_t>(From.Filter));
@ -243,9 +241,8 @@ v1::RefsRequest Marshaller::toProtobuf(const clangd::RefsRequest &From) {
return RPCRequest;
}
v1::RelationsRequest
Marshaller::toProtobuf(const clangd::RelationsRequest &From) {
v1::RelationsRequest RPCRequest;
RelationsRequest Marshaller::toProtobuf(const clangd::RelationsRequest &From) {
RelationsRequest RPCRequest;
for (const auto &ID : From.Subjects)
RPCRequest.add_subjects(ID.str());
RPCRequest.set_predicate(static_cast<uint32_t>(From.Predicate));
@ -254,8 +251,8 @@ Marshaller::toProtobuf(const clangd::RelationsRequest &From) {
return RPCRequest;
}
llvm::Expected<v1::Symbol> Marshaller::toProtobuf(const clangd::Symbol &From) {
v1::Symbol Result;
llvm::Expected<Symbol> Marshaller::toProtobuf(const clangd::Symbol &From) {
Symbol Result;
Result.set_id(From.ID.str());
*Result.mutable_info() = toProtobuf(From.SymInfo);
Result.set_name(From.Name.str());
@ -290,8 +287,8 @@ llvm::Expected<v1::Symbol> Marshaller::toProtobuf(const clangd::Symbol &From) {
return Result;
}
llvm::Expected<v1::Ref> Marshaller::toProtobuf(const clangd::Ref &From) {
v1::Ref Result;
llvm::Expected<Ref> Marshaller::toProtobuf(const clangd::Ref &From) {
Ref Result;
Result.set_kind(static_cast<uint32_t>(From.Kind));
auto Location = toProtobuf(From.Location);
if (!Location)
@ -300,10 +297,9 @@ llvm::Expected<v1::Ref> Marshaller::toProtobuf(const clangd::Ref &From) {
return Result;
}
llvm::Expected<v1::Relation>
Marshaller::toProtobuf(const clangd::SymbolID &Subject,
const clangd::Symbol &Object) {
v1::Relation Result;
llvm::Expected<Relation> Marshaller::toProtobuf(const clangd::SymbolID &Subject,
const clangd::Symbol &Object) {
Relation Result;
*Result.mutable_subject_id() = Subject.str();
auto SerializedObject = toProtobuf(Object);
if (!SerializedObject)
@ -346,23 +342,22 @@ llvm::Expected<std::string> Marshaller::uriToRelativePath(llvm::StringRef URI) {
}
clangd::SymbolLocation::Position
Marshaller::fromProtobuf(const v1::Position &Message) {
Marshaller::fromProtobuf(const Position &Message) {
clangd::SymbolLocation::Position Result;
Result.setColumn(static_cast<uint32_t>(Message.column()));
Result.setLine(static_cast<uint32_t>(Message.line()));
return Result;
}
v1::Position
Position
Marshaller::toProtobuf(const clangd::SymbolLocation::Position &Position) {
remote::v1::Position Result;
remote::Position Result;
Result.set_column(Position.column());
Result.set_line(Position.line());
return Result;
}
clang::index::SymbolInfo
Marshaller::fromProtobuf(const v1::SymbolInfo &Message) {
clang::index::SymbolInfo Marshaller::fromProtobuf(const SymbolInfo &Message) {
clang::index::SymbolInfo Result;
Result.Kind = static_cast<clang::index::SymbolKind>(Message.kind());
Result.SubKind = static_cast<clang::index::SymbolSubKind>(Message.subkind());
@ -372,8 +367,8 @@ Marshaller::fromProtobuf(const v1::SymbolInfo &Message) {
return Result;
}
v1::SymbolInfo Marshaller::toProtobuf(const clang::index::SymbolInfo &Info) {
v1::SymbolInfo Result;
SymbolInfo Marshaller::toProtobuf(const clang::index::SymbolInfo &Info) {
SymbolInfo Result;
Result.set_kind(static_cast<uint32_t>(Info.Kind));
Result.set_subkind(static_cast<uint32_t>(Info.SubKind));
Result.set_language(static_cast<uint32_t>(Info.Lang));
@ -382,7 +377,7 @@ v1::SymbolInfo Marshaller::toProtobuf(const clang::index::SymbolInfo &Info) {
}
llvm::Expected<clangd::SymbolLocation>
Marshaller::fromProtobuf(const v1::SymbolLocation &Message) {
Marshaller::fromProtobuf(const SymbolLocation &Message) {
clangd::SymbolLocation Location;
auto URIString = relativePathToURI(Message.file_path());
if (!URIString)
@ -393,9 +388,9 @@ Marshaller::fromProtobuf(const v1::SymbolLocation &Message) {
return Location;
}
llvm::Expected<v1::SymbolLocation>
llvm::Expected<SymbolLocation>
Marshaller::toProtobuf(const clangd::SymbolLocation &Location) {
remote::v1::SymbolLocation Result;
remote::SymbolLocation Result;
auto RelativePath = uriToRelativePath(Location.FileURI);
if (!RelativePath)
return RelativePath.takeError();
@ -405,9 +400,9 @@ Marshaller::toProtobuf(const clangd::SymbolLocation &Location) {
return Result;
}
llvm::Expected<v1::HeaderWithReferences> Marshaller::toProtobuf(
llvm::Expected<HeaderWithReferences> Marshaller::toProtobuf(
const clangd::Symbol::IncludeHeaderWithReferences &IncludeHeader) {
v1::HeaderWithReferences Result;
HeaderWithReferences Result;
Result.set_references(IncludeHeader.References);
const std::string Header = IncludeHeader.IncludeHeader.str();
if (isLiteralInclude(Header)) {
@ -422,7 +417,7 @@ llvm::Expected<v1::HeaderWithReferences> Marshaller::toProtobuf(
}
llvm::Expected<clangd::Symbol::IncludeHeaderWithReferences>
Marshaller::fromProtobuf(const v1::HeaderWithReferences &Message) {
Marshaller::fromProtobuf(const HeaderWithReferences &Message) {
std::string Header = Message.header();
if (!isLiteralInclude(Header)) {
auto URIString = relativePathToURI(Header);

View File

@ -38,33 +38,32 @@ public:
Marshaller() = delete;
Marshaller(llvm::StringRef RemoteIndexRoot, llvm::StringRef LocalIndexRoot);
llvm::Expected<clangd::Symbol> fromProtobuf(const v1::Symbol &Message);
llvm::Expected<clangd::Ref> fromProtobuf(const v1::Ref &Message);
llvm::Expected<clangd::Symbol> fromProtobuf(const Symbol &Message);
llvm::Expected<clangd::Ref> fromProtobuf(const Ref &Message);
llvm::Expected<std::pair<clangd::SymbolID, clangd::Symbol>>
fromProtobuf(const v1::Relation &Message);
fromProtobuf(const Relation &Message);
llvm::Expected<clangd::LookupRequest>
fromProtobuf(const v1::LookupRequest *Message);
fromProtobuf(const LookupRequest *Message);
llvm::Expected<clangd::FuzzyFindRequest>
fromProtobuf(const v1::FuzzyFindRequest *Message);
llvm::Expected<clangd::RefsRequest>
fromProtobuf(const v1::RefsRequest *Message);
fromProtobuf(const FuzzyFindRequest *Message);
llvm::Expected<clangd::RefsRequest> fromProtobuf(const RefsRequest *Message);
llvm::Expected<clangd::RelationsRequest>
fromProtobuf(const v1::RelationsRequest *Message);
fromProtobuf(const RelationsRequest *Message);
/// toProtobuf() functions serialize native clangd types and strip IndexRoot
/// from the file paths specific to indexing machine. fromProtobuf() functions
/// deserialize clangd types and translate relative paths into machine-native
/// URIs.
v1::LookupRequest toProtobuf(const clangd::LookupRequest &From);
v1::FuzzyFindRequest toProtobuf(const clangd::FuzzyFindRequest &From);
v1::RefsRequest toProtobuf(const clangd::RefsRequest &From);
v1::RelationsRequest toProtobuf(const clangd::RelationsRequest &From);
LookupRequest toProtobuf(const clangd::LookupRequest &From);
FuzzyFindRequest toProtobuf(const clangd::FuzzyFindRequest &From);
RefsRequest toProtobuf(const clangd::RefsRequest &From);
RelationsRequest toProtobuf(const clangd::RelationsRequest &From);
llvm::Expected<v1::Symbol> toProtobuf(const clangd::Symbol &From);
llvm::Expected<v1::Ref> toProtobuf(const clangd::Ref &From);
llvm::Expected<v1::Relation> toProtobuf(const clangd::SymbolID &Subject,
const clangd::Symbol &Object);
llvm::Expected<Symbol> toProtobuf(const clangd::Symbol &From);
llvm::Expected<Ref> toProtobuf(const clangd::Ref &From);
llvm::Expected<Relation> toProtobuf(const clangd::SymbolID &Subject,
const clangd::Symbol &Object);
/// Translates \p RelativePath into the absolute path and builds URI for the
/// user machine. This translation happens on the client side with the
@ -78,18 +77,18 @@ public:
llvm::Expected<std::string> uriToRelativePath(llvm::StringRef URI);
private:
clangd::SymbolLocation::Position fromProtobuf(const v1::Position &Message);
v1::Position toProtobuf(const clangd::SymbolLocation::Position &Position);
clang::index::SymbolInfo fromProtobuf(const v1::SymbolInfo &Message);
v1::SymbolInfo toProtobuf(const clang::index::SymbolInfo &Info);
clangd::SymbolLocation::Position fromProtobuf(const Position &Message);
Position toProtobuf(const clangd::SymbolLocation::Position &Position);
clang::index::SymbolInfo fromProtobuf(const SymbolInfo &Message);
SymbolInfo toProtobuf(const clang::index::SymbolInfo &Info);
llvm::Expected<clangd::SymbolLocation>
fromProtobuf(const v1::SymbolLocation &Message);
llvm::Expected<v1::SymbolLocation>
fromProtobuf(const SymbolLocation &Message);
llvm::Expected<SymbolLocation>
toProtobuf(const clangd::SymbolLocation &Location);
llvm::Expected<v1::HeaderWithReferences>
llvm::Expected<HeaderWithReferences>
toProtobuf(const clangd::Symbol::IncludeHeaderWithReferences &IncludeHeader);
llvm::Expected<clangd::Symbol::IncludeHeaderWithReferences>
fromProtobuf(const v1::HeaderWithReferences &Message);
fromProtobuf(const HeaderWithReferences &Message);
/// RemoteIndexRoot and LocalIndexRoot are absolute paths to the project (on
/// remote and local machine respectively) and include a trailing slash. One

View File

@ -74,7 +74,7 @@ llvm::cl::opt<std::string> ServerAddress(
"server-address", llvm::cl::init("0.0.0.0:50051"),
llvm::cl::desc("Address of the invoked server. Defaults to 0.0.0.0:50051"));
class RemoteIndexServer final : public SymbolIndex::Service {
class RemoteIndexServer final : public v1::SymbolIndex::Service {
public:
RemoteIndexServer(clangd::SymbolIndex &Index, llvm::StringRef IndexRoot)
: Index(Index) {

View File

@ -133,7 +133,7 @@ TEST(RemoteMarshallingTest, URITranslation) {
// Paths transmitted over the wire can not be absolute, they have to be
// relative.
v1::Ref WithAbsolutePath;
Ref WithAbsolutePath;
*WithAbsolutePath.mutable_location()->mutable_file_path() =
"/usr/local/user/home/HelloWorld.cpp";
Deserialized = ProtobufMarshaller.fromProtobuf(WithAbsolutePath);
@ -282,7 +282,7 @@ TEST(RemoteMarshallingTest, IncludeHeaderURIs) {
Sym.IncludeHeaders.pop_back();
Serialized = ProtobufMarshaller.toProtobuf(Sym);
ASSERT_TRUE(bool(Serialized));
v1::HeaderWithReferences InvalidHeader;
HeaderWithReferences InvalidHeader;
InvalidHeader.set_header(convert_to_slash("/absolute/path/Header.h"));
InvalidHeader.set_references(9000);
*Serialized->add_headers() = InvalidHeader;
@ -388,7 +388,7 @@ TEST(RemoteMarshallingTest, RelationsRequestSerialization) {
}
TEST(RemoteMarshallingTest, RelationsRequestFailingSerialization) {
v1::RelationsRequest Serialized;
RelationsRequest Serialized;
Serialized.add_subjects("ZZZZZZZZZZZZZZZZ");
Marshaller ProtobufMarshaller(testPath("remote/"), testPath("local/"));
auto Deserialized = ProtobufMarshaller.fromProtobuf(&Serialized);