[PATCH] D73610: [clangd] Replace raw lexer code with token buffer in prepare rename.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 29 03:34:20 PST 2020
hokein updated this revision to Diff 241096.
hokein added a comment.
revert an accident change.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D73610/new/
https://reviews.llvm.org/D73610
Files:
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/test/rename.test
Index: clang-tools-extra/clangd/test/rename.test
===================================================================
--- clang-tools-extra/clangd/test/rename.test
+++ clang-tools-extra/clangd/test/rename.test
@@ -21,12 +21,9 @@
# CHECK-NEXT: }
---
{"jsonrpc":"2.0","id":2,"method":"textDocument/prepareRename","params":{"textDocument":{"uri":"test:///foo.cpp"},"position":{"line":0,"character":2}}}
-# CHECK: "error": {
-# CHECK-NEXT: "code": -32001,
-# CHECK-NEXT: "message": "Cannot rename symbol: there is no symbol at the given location"
-# CHECK-NEXT: },
-# CHECK-NEXT: "id": 2,
-# CHECK-NEXT: "jsonrpc": "2.0"
+# CHECK: "id": 2,
+# CHECK-NEXT: "jsonrpc": "2.0",
+# CHECK-NEXT: "result": null
---
{"jsonrpc":"2.0","id":4,"method":"textDocument/rename","params":{"textDocument":{"uri":"test:///foo.cpp"},"position":{"line":0,"character":2},"newName":"bar"}}
# CHECK: "error": {
Index: clang-tools-extra/clangd/ClangdServer.cpp
===================================================================
--- clang-tools-extra/clangd/ClangdServer.cpp
+++ clang-tools-extra/clangd/ClangdServer.cpp
@@ -316,16 +316,21 @@
return CB(InpAST.takeError());
auto &AST = InpAST->AST;
const auto &SM = AST.getSourceManager();
- SourceLocation Loc =
- SM.getMacroArgExpandedLocation(getBeginningOfIdentifier(
- Pos, AST.getSourceManager(), AST.getLangOpts()));
- auto Range = getTokenRange(SM, AST.getLangOpts(), Loc);
- if (!Range)
- return CB(llvm::None); // "rename" is not valid at the position.
+ auto Loc = sourceLocationInMainFile(SM, Pos);
+ if (!Loc)
+ return CB(Loc.takeError());
+ const auto *TouchingIdentifier =
+ spelledIdentifierTouching(*Loc, AST.getTokens());
+ if (!TouchingIdentifier)
+ return CB(llvm::None); // no rename on non-identifiers.
+
+ auto Range = halfOpenToRange(
+ SM, CharSourceRange::getCharRange(TouchingIdentifier->location(),
+ TouchingIdentifier->endLocation()));
if (CrossFileRename)
// FIXME: we now assume cross-file rename always succeeds, revisit this.
- return CB(*Range);
+ return CB(Range);
// Performing the local rename isn't substantially more expensive than
// doing an AST-based check, so we just rename and throw away the results.
@@ -338,7 +343,7 @@
// the message to users (VSCode does).
return CB(Changes.takeError());
}
- return CB(*Range);
+ return CB(Range);
};
WorkScheduler.runWithAST("PrepareRename", File, std::move(Action));
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73610.241096.patch
Type: text/x-patch
Size: 2607 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200129/fc791389/attachment.bin>
More information about the cfe-commits
mailing list