indentLess function

bool indentLess(
  1. StateCommandTarget target
)

Remove a unit of indentation from all selected lines.

Implementation

bool indentLess(StateCommandTarget target) {
  if (target.state.isReadOnly) return false;

  final state = target.state;

  target.dispatch(state.update([
    TransactionSpec(
      changes: _changeBySelectedLine(state, (line, changes, range) {
        final match = RegExp(r'^\s*').firstMatch(line.text);
        final space = match?.group(0) ?? '';
        if (space.isEmpty) return;

        final col = countColumn(space, state.tabSize);
        var keep = 0;
        final insertCols = math.max(0, col - getIndentUnit(state));
        final insert = indentString(state, insertCols);

        while (keep < space.length &&
            keep < insert.length &&
            space.codeUnitAt(keep) == insert.codeUnitAt(keep)) {
          keep++;
        }

        changes.add(ChangeSpec(
          from: line.from + keep,
          to: line.from + space.length,
          insert: insert.substring(keep),
        ));
      }).changes,
      userEvent: 'delete.dedent',
    ),
  ]));
  return true;
}