textSortSelectedLines function

TextLineCommandResult textSortSelectedLines({
  1. required List<String> lines,
  2. required TextLineStateSnapshot state,
  3. bool descending = false,
  4. bool caseSensitive = false,
})

Implementation

TextLineCommandResult textSortSelectedLines({
  required List<String> lines,
  required TextLineStateSnapshot state,
  bool descending = false,
  bool caseSensitive = false,
}) {
  final nextLines = lines.isEmpty ? <String>[''] : List<String>.from(lines);
  final clampedState = _clampLineStateSnapshot(state, nextLines);
  final hasSelection = clampedState.hasSelection;
  final span = hasSelection
      ? _selectedLineSpan(clampedState)
      : (startLine: 0, endLine: nextLines.length - 1);
  if (span.startLine >= span.endLine) {
    return _lineResultFromSnapshot(nextLines, clampedState, changed: false);
  }

  final originalTexts = nextLines.sublist(span.startLine, span.endLine + 1);
  final sortedTexts = List<String>.from(originalTexts)
    ..sort(
      (a, b) => _compareLineContent(
        a,
        b,
        descending: descending,
        caseSensitive: caseSensitive,
      ),
    );
  if (_listStringEquals(originalTexts, sortedTexts)) {
    return _lineResultFromSnapshot(nextLines, clampedState, changed: false);
  }

  nextLines.replaceRange(span.startLine, span.endLine + 1, sortedTexts);
  return _lineResultFromSnapshot(nextLines, clampedState);
}