sortAndValidateTextEdits function

List<LspTextEdit> sortAndValidateTextEdits(
  1. List<LspTextEdit> edits
)

Sorts edits bottom-to-top for in-place application and rejects overlaps (omp's sortAndValidateTextEdits).

Equal start positions tiebreak by original array index descending so that, applied bottom-up, inserts at the same position land in array order (per the LSP spec the array order defines the result order). Byte-identical non-empty range edits are idempotent, so duplicate server output is collapsed before overlap validation. Throws StateError on overlap.

Implementation

List<LspTextEdit> sortAndValidateTextEdits(List<LspTextEdit> edits) {
  final indexed = <(LspTextEdit, int)>[
    for (var i = 0; i < edits.length; i++) (edits[i], i),
  ];
  indexed.sort(_compareBottomToTop);
  final unique = _collapseDuplicates(indexed);
  _rejectOverlaps(unique);
  return unique;
}