diff --git a/toolchain/language_server/context.cpp b/toolchain/language_server/context.cpp index e5ca11723396..8aaa4df65cba 100644 --- a/toolchain/language_server/context.cpp +++ b/toolchain/language_server/context.cpp @@ -77,8 +77,8 @@ class DiagnosticConsumer : public Diagnostics::Consumer { auto GetRange(const Diagnostics::Loc& loc) -> clang::clangd::Range { return {.start = {.line = loc.line_number - 1, .character = loc.column_number - 1}, - .end = {.line = loc.line_number, - .character = loc.column_number + loc.length}}; + .end = {.line = loc.line_number - 1, + .character = loc.column_number + loc.length - 1}}; } // Converts a diagnostic level to an LSP severity. diff --git a/toolchain/language_server/testdata/text_document/diagnostics.carbon b/toolchain/language_server/testdata/text_document/diagnostics.carbon index 1b0a8a218152..8fa351a29c71 100644 --- a/toolchain/language_server/testdata/text_document/diagnostics.carbon +++ b/toolchain/language_server/testdata/text_document/diagnostics.carbon @@ -48,8 +48,8 @@ // CHECK:STDOUT: "message": "opening symbol without a corresponding closing symbol", // CHECK:STDOUT: "range": { // CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 2, -// CHECK:STDOUT: "line": 1 +// CHECK:STDOUT: "character": 1, +// CHECK:STDOUT: "line": 0 // CHECK:STDOUT: }, // CHECK:STDOUT: "start": { // CHECK:STDOUT: "character": 0, @@ -63,8 +63,8 @@ // CHECK:STDOUT: "message": "unrecognized declaration introducer", // CHECK:STDOUT: "range": { // CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 2, -// CHECK:STDOUT: "line": 1 +// CHECK:STDOUT: "character": 1, +// CHECK:STDOUT: "line": 0 // CHECK:STDOUT: }, // CHECK:STDOUT: "start": { // CHECK:STDOUT: "character": 0, @@ -78,8 +78,8 @@ // CHECK:STDOUT: "message": "semantics TODO: `handle invalid parse trees in `check``", // CHECK:STDOUT: "range": { // CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 2, -// CHECK:STDOUT: "line": 1 +// CHECK:STDOUT: "character": 1, +// CHECK:STDOUT: "line": 0 // CHECK:STDOUT: }, // CHECK:STDOUT: "start": { // CHECK:STDOUT: "character": 0, @@ -104,8 +104,8 @@ // CHECK:STDOUT: "message": "no return expression should be provided in this context", // CHECK:STDOUT: "range": { // CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 20, -// CHECK:STDOUT: "line": 1 +// CHECK:STDOUT: "character": 19, +// CHECK:STDOUT: "line": 0 // CHECK:STDOUT: }, // CHECK:STDOUT: "start": { // CHECK:STDOUT: "character": 9, diff --git a/toolchain/language_server/testdata/text_document/open_with_cpp_nonexistent.carbon b/toolchain/language_server/testdata/text_document/open_with_cpp_nonexistent.carbon index 1c166bde0ac2..5be1f27d396b 100644 --- a/toolchain/language_server/testdata/text_document/open_with_cpp_nonexistent.carbon +++ b/toolchain/language_server/testdata/text_document/open_with_cpp_nonexistent.carbon @@ -44,8 +44,8 @@ // CHECK:STDOUT: "message": "'nonexistent.h' file not found", // CHECK:STDOUT: "range": { // CHECK:STDOUT: "end": { -// CHECK:STDOUT: "character": 11, -// CHECK:STDOUT: "line": 1 +// CHECK:STDOUT: "character": 10, +// CHECK:STDOUT: "line": 0 // CHECK:STDOUT: }, // CHECK:STDOUT: "start": { // CHECK:STDOUT: "character": 9,