[PATCH] D39057: [clangd][WIP] Integrate the refactoring actions into clangd

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 23 00:44:02 PDT 2017

ilya-biryukov added inline comments.

Comment at: clangd/ClangdServer.cpp:500
+    if (!RefactoringClient)
+      RefactoringClient = llvm::make_unique<tooling::RefactoringEditorClient>();
+    Results = clangd::findAvailableRefactoringCommands(*RefactoringClient, *AST,
Maybe initialize `RefactoringClient` in constructor?

Comment at: clangd/ClangdServer.cpp:514
+  std::shared_ptr<CppFile> Resources = Units.getFile(File);
+  assert(Resources && "executeCommand getCommands on non-added file");

Comment at: clangd/ClangdServer.cpp:526
+        clangd::performRefactoringCommand(*RefactoringClient, CommandName, *AST,
+                                          SelectionRange, Logger);
NIT: remove empty line. 

Comment at: clangd/Protocol.cpp:992
+                       clangd::Logger &Logger) {
+  CommandArgument Result;
+  for (auto &NextKeyValue : *Params) {
Maybe use `llvm::Optional<CommandArgument>` instead of `CommandArgument`?
If the loop body below won't get executed (i.e., `Params` is empty), we'll be returning uninitialized local variable.

Comment at: clangd/Protocol.h:540
+  enum Kind { SelectionRangeKind, TextDocumentIdentifierKind };
+  Kind ArgumentKind;
Could we make `ArgumentKind`, `union` members and default constructor private  (`makeDocumentID` , `makeSelectionRange` and `unparse` would be the only way to construct `CommandArgument`)?

This would give an interface that's much harder to misuse.



More information about the cfe-commits mailing list