When user wants to rename the symbol to the same name we shouldn't do any work.
Bail out early and return error to save compute.
Details
- Reviewers
hokein - Commits
- rG91ce6fb5a65f: [clangd] Abort rename when given the same name
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
clang-tools-extra/clangd/refactor/Rename.cpp | ||
---|---|---|
218 | returning an error seems to be an interesting idea, thinking more about that, it might be better than just returning an empty workspaceEdit silently without noticing user. | |
clang-tools-extra/clangd/unittests/RenameTests.cpp | ||
907 | this test is for prepareRename, I think we should put it to TEST(RenameTest, Renameable). |
clang-tools-extra/clangd/refactor/Rename.cpp | ||
---|---|---|
218 | We don't know what the user's intent was here - it's at least somewhat likely they changed their mind about the operation but hit "enter" instead of "escape". So a message describing the situation "new name is the same as the old name" would be more appropriate than suggesting a correction. But I'm wondering whether this error message actually helps (vs "succeeding" with no edits). Is it actionable? What's the scenario where the user: |
clang-tools-extra/clangd/refactor/Rename.cpp | ||
---|---|---|
218 |
SG. In an ideal world, I'd expect we emit a non-error message to inform that there is nothing happen for the rename, but LSP doesn't have such option :( The behavior of editors are varied on this case, e.g.
|
- Change error message to description rather than suggestion.
- Move test to more appropriate location.
clang-tools-extra/clangd/refactor/Rename.cpp | ||
---|---|---|
218 |
I can understand this point of view, but I'm a bit sceptical of the "fail" silently approach. The "actionable" for user would be to not type in the same name as before :) Also, user might wanted to rename the symbol to something slightly different (e.g. fix typo) and then have a typo in new name, too. I think there is value in telling the user that there was no rename because the name is the same - I don't think it hurts them in any way. We're just being explicit in what happened/didn't happen. I think "new name = old name" can be a reasonable "error" scenario and I think there is a definite value in being explicit about what we do or decide not to do. My point is that I can't see a scenario when user actually wants to rename the symbol deliberately using the same name and I think this should, in fact, be an error to do so. |
clang-tools-extra/clangd/unittests/RenameTests.cpp | ||
---|---|---|
780 | Add a comment or rename Var => SameName, to make the "new_name == old_name" more explicitly. |
returning an error seems to be an interesting idea, thinking more about that, it might be better than just returning an empty workspaceEdit silently without noticing user.