sammccall added inline comments.

================
Comment at: clang-tools-extra/clangd/CMakeLists.txt:161
 if (CLANGD_ENABLE_REMOTE)
+  add_definitions(-D CLANGD_REMOTE)
   include(FindGRPC)
----------------
Can we use features.inc.in instead for this?
(I don't have a strong opinion on which one is better, but I'd rather not do 
things two ways)


================
Comment at: clang-tools-extra/clangd/index/dex/dexp/Dexp.cpp:40
+    RemoteMode("remote",
+               llvm::cl::desc("Connect to <INDEX LOCATION> remote index"));
+
----------------
kbobyrev wrote:
> @sammccall do you know why this opt is not being set for some reason? When I 
> try to run `dexp --help` it is displayed in the possible arguments and when I 
> try to pass anything invalid for boolean flags this also fails, but the value 
> is not changed regardless of the values I put here :( Must be something 
> simple I've missed.
I think you need to read it before we `ResetCommandLineParser()`. That part is 
a bit of a hack :-(


================
Comment at: clang-tools-extra/clangd/index/remote/CMakeLists.txt:1
-generate_grpc_protos(RemoteIndexProtos "Index.proto")
+generate_grpc_protos(RemoteIndexProtos "Index.proto" RemoteProtosLocation)
 
----------------
kbobyrev wrote:
> sammccall wrote:
> > why is this extra param needed?
> Because this needs to be included both here and for `dexp` binary.
still? I thought the idea was stuff outside this directory could include the 
client header, whether it's compiled in or not, and that header doesn't require 
protos


================
Comment at: clang-tools-extra/clangd/index/remote/CMakeLists.txt:9
+add_definitions(-DGOOGLE_PROTOBUF_NO_RTTI=1)
+add_clang_library(clangDaemonRemoteIndex
+  Index.cpp
----------------
sammccall wrote:
> let's avoid propagating the clangDaemon name any further. clangdRemoteIndex? 
> or clangdRemoteIndexClient?
clang -> clangd though :-)


================
Comment at: clang-tools-extra/clangd/index/remote/CMakeLists.txt:15
+
+  protobuf
+  grpc++
----------------
do protobuf/grpc++ not get linked in transitively by linking against 
RemoteIndexProtos? Sad :-(


================
Comment at: clang-tools-extra/clangd/index/remote/Index.cpp:36
+    while (Reader->Read(&Reply))
+      Callback(symbolFromYAML(Reply.yaml_serializatiton(), &Strings));
+    grpc::Status Status = Reader->Finish();
----------------
error-handling: what if the symbol is invalid? (log and skip)


================
Comment at: clang-tools-extra/clangd/index/remote/Index.cpp:36
+    while (Reader->Read(&Reply))
+      Callback(symbolFromYAML(Reply.yaml_serializatiton(), &Strings));
+    grpc::Status Status = Reader->Finish();
----------------
sammccall wrote:
> error-handling: what if the symbol is invalid? (log and skip)
this should call a function in marshalling, which just does the YAML thing for 
now


================
Comment at: clang-tools-extra/clangd/index/remote/Index.cpp:38
+    grpc::Status Status = Reader->Finish();
+    llvm::outs() << "lookup rpc " << (Status.ok() ? "succeeded" : "failed")
+                 << '\n';
----------------
use log()/vlog if you want to log.
But this should probably be a trace::Span instead so you get the latency.


================
Comment at: clang-tools-extra/clangd/index/remote/Index.cpp:47
+
+    grpc::ClientContext Context;
+    std::unique_ptr<grpc::ClientReader<remote::FuzzyFindReply>> Reader(
----------------
I'd consider pulling out a streamRPC template, these tend to attract 
cross-cutting code (setting deadlines, tracing/logging, and such)


================
Comment at: clang-tools-extra/clangd/index/remote/Index.cpp:97
+std::unique_ptr<SymbolIndex> connect(llvm::StringRef Address) {
+#ifdef CLANGD_REMOTE
+  return std::unique_ptr<SymbolIndex>(new IndexClient(Address));
----------------
if  remote is disabled we can't compile the rest of this file.
Rather than ifdefs here, I'd suggest doing it at the cmake level:

```
if(CLANGD_ENABLE_REMOTE)
  add_clang_library(... Index.cpp)
else()
  add_clang_library(... IndexUnimplemented.cpp)
endif()
```


================
Comment at: clang-tools-extra/clangd/index/remote/Index.h:1
+//===--- Index.h -------------------------------------------------*- 
C++-*-===//
+//
----------------
Suggest calling this Client.h


================
Comment at: clang-tools-extra/clangd/index/remote/Index.h:12
+
+#include "grpcpp/grpcpp.h"
+
----------------
no implementation headers should be needed now


================
Comment at: clang-tools-extra/clangd/index/remote/Index.h:21
+
+std::unique_ptr<SymbolIndex> connect(llvm::StringRef Address);
+
----------------
this needs docs:
 - what it does
 - error conditions
 - what happens if support isn't compiled in


================
Comment at: clang-tools-extra/clangd/index/remote/Index.h:21
+
+std::unique_ptr<SymbolIndex> connect(llvm::StringRef Address);
+
----------------
sammccall wrote:
> this needs docs:
>  - what it does
>  - error conditions
>  - what happens if support isn't compiled in
is the address resolved synchronously? is there a timeout?
does this block until the channel is ready, or will that happen on the first 
request?

(My sense is you're probably going to want a timeout param and to describe what 
it does, and *maybe* return different error types)


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:13
 
 service Index {
+  rpc Lookup(LookupRequest) returns (stream Symbol) {}
----------------
Just realized: we should probably call this SymbolIndex to match 
clangd::SymbolIndex (or rename the latter to match this)


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:21
+
+message LookupRequest { repeated string ids = 1; }
+
----------------
nit: I'd suggest grouping requests with corresponding replies, and all the 
common vocab types either above or below.


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:36
 
-message LookupRequest { string id = 1; }
+// Actual messages contain only symbols and they will be followed by a
+// terminating message with has_more field.
----------------
"Actual messages" is a bit vague.
Maybe "The response is a stream of `symbol` messages, and one terminating 
`has_more` message."


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:39
+message FuzzyFindReply {
+  oneof symbol_or_has_more {
+    Symbol symbol = 1;
----------------
I think a generic name like `kind` would be more readable here.


If the stream/final-result pattern is going to be our common one, you could 
consider giving them *all* generic names, like:
```
message FuzzyFindReply {
  oneof kind {
    Symbol stream_result;
    bool final_result; // HasMore
  }
}
```

Then they conform to a `Stream<StreamT, FinalT>` concept and you can abstract 
the handling in a template.

This makes sense if we want to lean into the index service being a mechanical 
translation of clangd::SymbolIndex. But I'm not sure whether that's a good 
idea, e.g. this one needs to be backwards-compatible, so they may drift.


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:55
+  oneof ref_or_has_more {
+    string ref = 1;
+    bool has_more = 2;
----------------
Ref should be a message with ref_yaml for now?
(Consistency with Symbol)


================
Comment at: clang-tools-extra/clangd/index/remote/Index.proto:37
+message FuzzyFindReply {
+  // FIXME(kirillbobyrev): Convert to Symbol.
+  repeated string symbols = 1;
----------------
kbobyrev wrote:
> sammccall wrote:
> > confused... why not use Symbol now?
> Couldn't put `Symbol`s into `FuzzyFindReply` for some reason. Clangd behaves 
> really weird with Protobuf inclusions for me... Need to figure out why that 
> happens, but might be me doing something wrong.
Did you find out? Fixing this isn't a backwards-compatible change, and "this 
code is broken and I don't know why" isn't a great state for checkin.

Happy to help but please provide some details.


================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:76
+      FuzzyFindReply NextMessage;
+      Symbol *NextSymbol = new Symbol;
+      NextSymbol->set_yaml_serializatiton(toYAML(Sym));
----------------
new and set_allocated_* are scary :-)

NextMessage.mutable_symbol()->set_yaml_serialization(...)


================
Comment at: clang-tools-extra/clangd/index/remote/server/Server.cpp:89
+                    grpc::ServerWriter<RefsReply> *Reply) override {
+    clangd::RefsRequest Req;
+    for (const auto &ID : Request->ids()) {
----------------
fromProtobuf(Request)?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D78521/new/

https://reviews.llvm.org/D78521



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to