[clang-tools-extra] [clangd] Fix offset invalid on line. (PR #202267)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 8 09:35:34 PDT 2026
https://github.com/playerC updated https://github.com/llvm/llvm-project/pull/202267
>From 5eab8d2cb821c1a9814ede6f4ebca223dab50794 Mon Sep 17 00:00:00 2001
From: player <playerc at msn.cn>
Date: Mon, 8 Jun 2026 14:27:34 +0800
Subject: [PATCH] [clangd] Fix offset invalid on line.
Fixed the offset invalid on line error, when the change text longer
than that line.
---
clang-tools-extra/clangd/SourceCode.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/clang-tools-extra/clangd/SourceCode.cpp b/clang-tools-extra/clangd/SourceCode.cpp
index 21c078fd2cdb9..60aba1da64559 100644
--- a/clang-tools-extra/clangd/SourceCode.cpp
+++ b/clang-tools-extra/clangd/SourceCode.cpp
@@ -1132,8 +1132,9 @@ llvm::Error applyChange(std::string &Contents,
if (!StartIndex)
return StartIndex.takeError();
+ // End position may longer than current line .
const Position &End = Change.range->end;
- llvm::Expected<size_t> EndIndex = positionToOffset(Contents, End, false);
+ llvm::Expected<size_t> EndIndex = positionToOffset(Contents, End, true);
inferFinalNewline(EndIndex, Contents, End);
if (!EndIndex)
return EndIndex.takeError();
@@ -1153,13 +1154,14 @@ llvm::Error applyChange(std::string &Contents,
ssize_t ComputedRangeLength =
lspLength(Contents.substr(*StartIndex, *EndIndex - *StartIndex));
- if (Change.rangeLength && ComputedRangeLength != *Change.rangeLength)
+ // CoumputedRangeLength may less equal than rangeLength.
+ if (Change.rangeLength && ComputedRangeLength > *Change.rangeLength)
return error(llvm::errc::invalid_argument,
"Change's rangeLength ({0}) doesn't match the "
"computed range length ({1}).",
*Change.rangeLength, ComputedRangeLength);
- Contents.replace(*StartIndex, *EndIndex - *StartIndex, Change.text);
+ Contents.replace(*StartIndex, ComputedRangeLength, Change.text);
return llvm::Error::success();
}
More information about the cfe-commits
mailing list