[clang-tools-extra] [clangd] Fix offset invalid on line. (PR #202267)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 7 23:37:38 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clangd
Author: player (playerC)
<details>
<summary>Changes</summary>
Fixed the offset invalid on line error, when the change text longer than that line.
---
Full diff: https://github.com/llvm/llvm-project/pull/202267.diff
1 Files Affected:
- (modified) clang-tools-extra/clangd/SourceCode.cpp (+5-3)
``````````diff
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();
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/202267
More information about the cfe-commits
mailing list