ilya-biryukov added a comment.

Looks good, just one major drawback to address. We shouldn't break clients by 
default (see comment in `ClangdMain.cpp`).
And a minor comment about flag naming.



================
Comment at: clangd/tool/ClangdMain.cpp:30
+static llvm::cl::opt<bool>
+    DisableSnippets("disable-snippets",
+                    llvm::cl::desc("Disable \"snippet\" completions and only "
----------------
Maybe replace a negated flag with positive alternative, e.g. `enable-snippets` 
or `use-snippets`?
Reading such "implicit" double negations is sometimes confusing (e.g. 
`!DisableSnippets` instead of `EnableSnippets`).


================
Comment at: clangd/tool/ClangdMain.cpp:33
+                                   "present plaintext completions."),
+                    llvm::cl::init(false));
+
----------------
After putting some thought into it, let's disable snippets by default. Sorry 
for driving this in a wrong direction in my previous comments.
Instead of using flag, LSP servers should look at initial `initialize` request 
and a value of 
`TextDocumentClientCapabilities.completion.completionItem.snippetSupport`.
(see 
https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#initialize-request).
And it seems bad from clangd side to break clients that don't support snippets 
**by default**. It's probably ok if user passed custom command-line arguments, 
overriding the defaults.

The problem is that we don't parse the `ClientCapabilities` now. It's not hard 
to add parsing of it, but that should probably be done in a separate commit and 
I can do this work if you want.
I think it's fine to commit this as is, **defaulting to not return snippets**, 
and add parsing of `ClientCapabilities` with a follow-up commit.


https://reviews.llvm.org/D37101



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

Reply via email to