codeBlockNewlineSuffix function

({int consumedColumns, String text})? codeBlockNewlineSuffix({
  1. required String beforeCursor,
  2. required String afterCursor,
  3. required String baseIndent,
})

Implementation

({String text, int consumedColumns})? codeBlockNewlineSuffix({
  required String beforeCursor,
  required String afterCursor,
  required String baseIndent,
}) {
  if (beforeCursor.isEmpty || afterCursor.isEmpty) {
    return null;
  }

  final opening = beforeCursor[beforeCursor.length - 1];
  final expectedClosing = switch (opening) {
    '{' => '}',
    '[' => ']',
    '(' => ')',
    _ => null,
  };
  if (expectedClosing == null) {
    return null;
  }

  final leadingWhitespace = afterCursor.length - afterCursor.trimLeft().length;
  if (leadingWhitespace >= afterCursor.length) {
    return null;
  }

  if (afterCursor[leadingWhitespace] != expectedClosing) {
    return null;
  }

  return (text: '\n$baseIndent', consumedColumns: leadingWhitespace);
}