adjustLspFoldRangesForLineChange method
Adjusts LSP fold ranges after a line count change.
editLine is the line where the edit occurred.
lineDelta is the number of lines added (positive) or removed (negative).
Implementation
void adjustLspFoldRangesForLineChange(int editLine, int lineDelta) {
if (_lspFoldRanges == null || lineDelta == 0) return;
final adjustedLspFoldRanges = <int, FoldRange>{};
for (final entry in _lspFoldRanges!.entries) {
final oldStartIndex = entry.key;
final fold = entry.value;
if (fold.endIndex < editLine) {
adjustedLspFoldRanges[oldStartIndex] = fold;
} else if (fold.startIndex <= editLine && fold.endIndex >= editLine) {
final newEndIndex = fold.endIndex + lineDelta;
if (newEndIndex >= oldStartIndex) {
final newFold = FoldRange(oldStartIndex, newEndIndex);
newFold.isFolded = fold.isFolded;
newFold.originallyFoldedChildren = fold.originallyFoldedChildren;
adjustedLspFoldRanges[oldStartIndex] = newFold;
}
} else if (fold.startIndex > editLine) {
final newStartIndex = fold.startIndex + lineDelta;
final newEndIndex = fold.endIndex + lineDelta;
if (newStartIndex >= 0 && newEndIndex >= newStartIndex) {
final newFold = FoldRange(newStartIndex, newEndIndex);
newFold.isFolded = fold.isFolded;
newFold.originallyFoldedChildren = fold.originallyFoldedChildren;
adjustedLspFoldRanges[newStartIndex] = newFold;
}
}
}
_lspFoldRanges = adjustedLspFoldRanges.isEmpty
? null
: adjustedLspFoldRanges;
_lspFoldRangesAdjustedNotFetched = true;
}