apply method

  1. @override
Future<String> apply(
  1. String original
)
override

Returns original, the content of file, with this change applied.

Implementation

@override
Future<String> apply(String original) async {
  final result = parseString(content: original);
  final unit = result.unit;

  final body = methodBodyIn(unit, className: className, method: method);

  final matches = <ListLiteral>[];

  body.visitChildren(
    NamedListVisitor(
      name: listVariableMatch,
      parentMatch: parentExpressionMatch,
      onMatch: matches.add,
    ),
  );

  if (matches.length <= index) {
    throw Exception('No matching list found at index $index');
  }

  final targetList = matches[index];
  final elements = ListInsert.parse(insert);
  if (elements?.isIn(targetList) ?? false) return original;

  return dartFormater.format(
    applyInsertions(original, _append(original, targetList, elements)),
  );
}