[clang-tools-extra] 421a2a0 - [clangd] Migrate to proto2 syntax

Kirill Bobyrev via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 23 05:27:28 PDT 2020


Author: Kirill Bobyrev
Date: 2020-10-23T14:27:15+02:00
New Revision: 421a2a0dbbd691abeb86dee150cf710a6122e269

URL: https://github.com/llvm/llvm-project/commit/421a2a0dbbd691abeb86dee150cf710a6122e269
DIFF: https://github.com/llvm/llvm-project/commit/421a2a0dbbd691abeb86dee150cf710a6122e269.diff

LOG: [clangd] Migrate to proto2 syntax

This allows us to check whether enum field is actually sent over the wire or missing.

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D89882

Added: 
    

Modified: 
    clang-tools-extra/clangd/index/remote/Index.proto
    clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/index/remote/Index.proto b/clang-tools-extra/clangd/index/remote/Index.proto
index 34c49756b1da..a9ebc75ebc88 100644
--- a/clang-tools-extra/clangd/index/remote/Index.proto
+++ b/clang-tools-extra/clangd/index/remote/Index.proto
@@ -6,12 +6,13 @@
 //
 //===----------------------------------------------------------------------===//
 
-syntax = "proto3";
+syntax = "proto2";
 
 package clang.clangd.remote.v1;
 
 // Semantics of SymbolIndex match clangd::SymbolIndex with all required
 // structures corresponding to their clangd::* counterparts.
+// NOTE: Enum values are offset by one to detect missing values.
 service SymbolIndex {
   rpc Lookup(LookupRequest) returns (stream LookupReply) {}
 
@@ -34,11 +35,11 @@ message LookupReply {
 }
 
 message FuzzyFindRequest {
-  string query = 1;
+  optional string query = 1;
   repeated string scopes = 2;
-  bool any_scope = 3;
-  uint32 limit = 4;
-  bool restricted_for_code_completion = 5;
+  optional bool any_scope = 3;
+  optional uint32 limit = 4;
+  optional bool restricted_for_code_completion = 5;
   repeated string proximity_paths = 6;
   repeated string preferred_types = 7;
 }
@@ -54,8 +55,8 @@ message FuzzyFindReply {
 
 message RefsRequest {
   repeated string ids = 1;
-  uint32 filter = 2;
-  uint32 limit = 3;
+  optional uint32 filter = 2;
+  optional uint32 limit = 3;
 }
 
 // The response is a stream of reference messages, and one terminating has_more
@@ -68,59 +69,59 @@ message RefsReply {
 }
 
 message Symbol {
-  string id = 1;
-  SymbolInfo info = 2;
-  string name = 3;
-  SymbolLocation definition = 4;
-  string scope = 5;
-  SymbolLocation canonical_declaration = 6;
-  int32 references = 7;
-  uint32 origin = 8;
-  string signature = 9;
-  string template_specialization_args = 10;
-  string completion_snippet_suffix = 11;
-  string documentation = 12;
-  string return_type = 13;
-  string type = 14;
+  optional string id = 1;
+  optional SymbolInfo info = 2;
+  optional string name = 3;
+  optional SymbolLocation definition = 4;
+  optional string scope = 5;
+  optional SymbolLocation canonical_declaration = 6;
+  optional int32 references = 7;
+  optional uint32 origin = 8;
+  optional string signature = 9;
+  optional string template_specialization_args = 10;
+  optional string completion_snippet_suffix = 11;
+  optional string documentation = 12;
+  optional string return_type = 13;
+  optional string type = 14;
   repeated HeaderWithReferences headers = 15;
-  uint32 flags = 16;
+  optional uint32 flags = 16;
 }
 
 message Ref {
-  SymbolLocation location = 1;
-  uint32 kind = 2;
+  optional SymbolLocation location = 1;
+  optional uint32 kind = 2;
 }
 
 message SymbolInfo {
-  uint32 kind = 1;
-  uint32 subkind = 2;
-  uint32 language = 3;
-  uint32 properties = 4;
+  optional uint32 kind = 1;
+  optional uint32 subkind = 2;
+  optional uint32 language = 3;
+  optional uint32 properties = 4;
 }
 
 message SymbolLocation {
-  Position start = 1;
-  Position end = 2;
+  optional Position start = 1;
+  optional Position end = 2;
   // clangd::SymbolLocation stores FileURI, but the protocol transmits a the
   // relative path. Because paths are 
diff erent on the remote and local machines
   // they will be translated in the marshalling layer.
-  string file_path = 3;
+  optional string file_path = 3;
 }
 
 message Position {
-  uint32 line = 1;
-  uint32 column = 2;
+  optional uint32 line = 1;
+  optional uint32 column = 2;
 }
 
 message HeaderWithReferences {
-  string header = 1;
-  uint32 references = 2;
+  optional string header = 1;
+  optional uint32 references = 2;
 }
 
 message RelationsRequest {
   repeated string subjects = 1;
-  uint32 predicate = 2;
-  uint32 limit = 3;
+  optional uint32 predicate = 2;
+  optional uint32 limit = 3;
 }
 
 // The response is a stream of reference messages, and one terminating has_more
@@ -135,6 +136,6 @@ message RelationsReply {
 // This struct does not mirror clangd::Relation but rather the arguments of
 // SymbolIndex::relations callback.
 message Relation {
-  string subject_id = 1;
-  Symbol object = 2;
+  optional string subject_id = 1;
+  optional Symbol object = 2;
 }

diff  --git a/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp b/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp
index ef7f77db83ca..1945d9142f12 100644
--- a/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp
+++ b/clang-tools-extra/clangd/index/remote/marshalling/Marshalling.cpp
@@ -11,6 +11,7 @@
 #include "Index.pb.h"
 #include "Protocol.h"
 #include "index/Index.h"
+#include "index/Ref.h"
 #include "index/Serialization.h"
 #include "index/Symbol.h"
 #include "index/SymbolID.h"
@@ -114,7 +115,10 @@ Marshaller::fromProtobuf(const v1::RefsRequest *Message) {
   if (!IDs)
     return IDs.takeError();
   Req.IDs = std::move(*IDs);
-  Req.Filter = static_cast<RefKind>(Message->filter());
+  if (Message->has_filter())
+    Req.Filter = static_cast<clangd::RefKind>(Message->filter());
+  else
+    Req.Filter = clangd::RefKind::All;
   if (Message->limit())
     Req.Limit = Message->limit();
   return Req;
@@ -127,6 +131,8 @@ Marshaller::fromProtobuf(const v1::RelationsRequest *Message) {
   if (!IDs)
     return IDs.takeError();
   Req.Subjects = std::move(*IDs);
+  if (!Message->has_predicate())
+    return error("RelationsRequest requires RelationKind predicate.");
   Req.Predicate = static_cast<RelationKind>(Message->predicate());
   if (Message->limit())
     Req.Limit = Message->limit();
@@ -180,7 +186,7 @@ llvm::Expected<clangd::Ref> Marshaller::fromProtobuf(const v1::Ref &Message) {
   if (!Location)
     return Location.takeError();
   Result.Location = *Location;
-  Result.Kind = static_cast<clangd::RefKind>(Message.kind());
+  Result.Kind = static_cast<RefKind>(Message.kind());
   return Result;
 }
 


        


More information about the cfe-commits mailing list