https://github.com/playerC updated https://github.com/llvm/llvm-project/pull/202267
>From 5eab8d2cb821c1a9814ede6f4ebca223dab50794 Mon Sep 17 00:00:00 2001 From: player <[email protected]> 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(); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
