[PATCH] D65263: [clangd] a prototype for triggering rename after extracting.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 25 01:44:16 PDT 2019
sammccall added a comment.
This is really cool! Hm, formatting is troublesome, well spotted :-)
As you're defining a generic mechanism, it'd be useful to have more examples to verify that this actually generalizes.
We might have to make them up (e.g. replace-auto-with-type-and-go-to-definition?)
If we can't show it generalizes, then I think this would still be useful enough just to dispense with generality and add a "renameAt" extension to CodeAction or something like that.
================
Comment at: clang-tools-extra/clangd/Protocol.cpp:544
+const llvm::StringLiteral ClientCommand::LSP_RENAME = "lsp.rename";
+
----------------
(why would "lsp" be in these names - surely this is just rename?)
================
Comment at: clang-tools-extra/clangd/Protocol.h:765
+// Similar to Command, but this command is executed in the LSP client (clangd
+// extension).
----------------
(If there's precedent for others using a similar protocol, we should link to it)
================
Comment at: clang-tools-extra/clangd/Protocol.h:777
+ // each command has a certain llvm::Optional structure for its arguments.
+ llvm::Optional<Position> renamePosition; // for LSP_RENAME
+};
----------------
couldn't we send a range here?
That would allow the client to skip prepareRename and still use its native UI.
(In principle. no need to actually implement this in vscode)
================
Comment at: clang-tools-extra/clangd/Protocol.h:807
+
+ /// A command that will be executed in the LSP client.
+ llvm::Optional<ClientCommand> clientCommand;
----------------
(mark extension here too).
================
Comment at: clang-tools-extra/clangd/Protocol.h:894
+ /// (clangd extension).
+ llvm::Optional<ClientCommand> command;
};
----------------
So there's a few places that the command could be specified:
1. in the code action, as a thing to do at the end (above)
2. as a parameter, when the client executes a command and the server calls applyWorkspaceEdit (here)
3. as the return value from executeCommand
This patch implements 1 & 2. Why this choice? (easiest to prototype is a perfectly sensible answer)
1 is restricted to code actions.
2 & 3 are (practically) restricted to executeCommand.
2 is restricted to when edits are applied.
(To me, implementing just 1 or just 3 seem like the strongest options...)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65263/new/
https://reviews.llvm.org/D65263
More information about the cfe-commits
mailing list