https://github.com/playerC created 
https://github.com/llvm/llvm-project/pull/202267

Fixed the offset invalid on line error, when the change text longer than that 
line.

>From 1ea58cde378c378f649cce47175e1c5ba112e4bb 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

Reply via email to