[PATCH] D70807: [clangd] Prefer the left character if the character on the right of the cursor is semicolon.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 28 02:31:39 PST 2019
hokein created this revision.
hokein added a reviewer: sammccall.
Herald added subscribers: usaxena95, kadircet, arphaman, jkorous, MaskRay, ilya-biryukov.
Herald added a project: clang.
This would make go-to-def works on the cases like int A = abc^;
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D70807
Files:
clang-tools-extra/clangd/Selection.cpp
clang-tools-extra/clangd/unittests/SelectionTests.cpp
clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
Index: clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
@@ -88,11 +88,8 @@
R"cpp( // Single statement in TU.
[[int v = [[1^00]]]];
)cpp",
- // FIXME: No node found associated to the position.
R"cpp( // Cursor at end of VarDecl.
- void func() {
- int v = 100 + 100^;
- }
+ [[int v = [[100]]^]];
)cpp",
// FIXME: No node found associated to the position.
R"cpp( // Cursor in between spaces.
Index: clang-tools-extra/clangd/unittests/SelectionTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SelectionTests.cpp
@@ -234,6 +234,7 @@
{"void foo() { [[foo^()]]; }", "CallExpr"},
{"void foo() { [[foo^]] (); }", "DeclRefExpr"},
{"int bar; void foo() [[{ foo (); }]]^", "CompoundStmt"},
+ {"int x = [[42]]^;", "IntegerLiteral"},
// Ignores whitespace, comments, and semicolons in the selection.
{"void foo() { [[foo^()]]; /*comment*/^}", "CallExpr"},
@@ -271,7 +272,6 @@
// FIXME: Ideally we'd get a declstmt or the VarDecl itself here.
// This doesn't happen now; the RAV doesn't traverse a node containing ;.
{"int x = 42;^", nullptr},
- {"int x = 42^;", nullptr},
// Common ancestor is logically TUDecl, but we never return that.
{"^int x; int y;^", nullptr},
Index: clang-tools-extra/clangd/Selection.cpp
===================================================================
--- clang-tools-extra/clangd/Selection.cpp
+++ clang-tools-extra/clangd/Selection.cpp
@@ -513,8 +513,8 @@
return {Offset - 1, Offset};
// We could choose either this byte or the previous. Usually we prefer the
// character on the right of the cursor (or under a block cursor).
- // But if that's whitespace, we likely want the token on the left.
- if (isWhitespace(Buf[Offset]) && !isWhitespace(Buf[Offset - 1]))
+ // But if that's whitespace/semicolon, we likely want the token on the left.
+ if (isWhitespace(Buf[Offset]) || Buf[Offset] == ';')
return {Offset - 1, Offset};
return {Offset, Offset + 1};
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70807.231385.patch
Type: text/x-patch
Size: 2408 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191128/06f91f80/attachment-0001.bin>
More information about the cfe-commits
mailing list