[clangd] Prefer the left character if the character on the right of the cursor is semicolon.
Summary: This would make go-to-def works on the cases like int A = abc^; Reviewers: sammccall Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D70807
This commit is contained in:
parent
08cce03a6d
commit
2330cee82f
@ -513,8 +513,9 @@ static std::pair<unsigned, unsigned> pointBounds(unsigned Offset, FileID FID,
|
||||
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.
|
||||
auto IsIgnoredChar = [](char C) { return isWhitespace(C) || C == ';'; };
|
||||
if (IsIgnoredChar(Buf[Offset]) && !IsIgnoredChar(Buf[Offset - 1]))
|
||||
return {Offset - 1, Offset};
|
||||
return {Offset, Offset + 1};
|
||||
}
|
||||
|
@ -234,6 +234,7 @@ TEST(SelectionTest, CommonAncestor) {
|
||||
{"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 @@ TEST(SelectionTest, CommonAncestor) {
|
||||
// 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},
|
||||
|
@ -88,11 +88,8 @@ TEST(SemanticSelection, All) {
|
||||
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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user