[PATCH] D38048: [clangd] Add textDocument/signatureHelp

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 20 01:53:15 PDT 2017


ilya-biryukov requested changes to this revision.
ilya-biryukov added a comment.
This revision now requires changes to proceed.

Thanks for the patch. Overall looks good, just a few comments.
Could you also add some tests?



================
Comment at: clangd/ClangdServer.h:243
+  /// Provide signature help for \p File at \p Pos. If \p OverridenContents is
+  /// not None, they will used only for code completion, i.e. no diagnostics
+  /// update will be scheduled and a draft for \p File will not be updated. If
----------------
Mentions "code completion" in the comment.


================
Comment at: clangd/ClangdUnit.cpp:536
+    SigHelp.signatures.reserve(NumCandidates);
+    // TODO(rwols): How can we determine the "active overload candidate"?
+    SigHelp.activeSignature = 0;
----------------
Code in clangd uses `FIXME` instead of `TODO`.


================
Comment at: clangd/ClangdUnit.cpp:589
+      }
+      case CodeCompletionString::CK_Optional:
+      case CodeCompletionString::CK_VerticalSpace:
----------------
Ignoring `CK_Optional` chunks leads to weird results. They represent parameters that have default arguments. For example,
```
int foo(int a, int b = 10, int c = 20);

int test() {
  foo(10, 20, 30); // signatureHelp shows foo(int a) here, which is confusing.
}
```


================
Comment at: clangd/ClangdUnit.cpp:691
+                      std::shared_ptr<PCHContainerOperations> PCHs) {
+  std::vector<const char *> ArgStrs;
+  for (const auto &S : Command.CommandLine)
----------------
Most of this function is almost identical to `clangd::codeComplete`. They only differ in some of the `CodeCompleteOpts` flags and `CodeCompletionConsumer`s they use, right?

Maybe extract a helper function that runs code completion and reuse it for both `clangd::codeComplete`and `clangd::signatureHelp`?


https://reviews.llvm.org/D38048





More information about the cfe-commits mailing list