modifyFile method

void modifyFile(
  1. String path,
  2. String contents(
    1. String current
    )
)

Updates the contents of an existing file

path is relative path to file e.g. "lib/src/file.dart" contents is a function that takes the current contents of the file and returns the modified contents of the file

Implementation

void modifyFile(String path, String Function(String current) contents) {
  final pathComponents = path.split("/");
  final relativeDirectoryComponents =
      pathComponents.sublist(0, pathComponents.length - 1);
  final directory = Directory.fromUri(
    relativeDirectoryComponents.fold(
      workingDirectory.uri,
      (Uri prev, elem) => prev.resolve("$elem/"),
    ),
  );
  final file = File.fromUri(directory.uri.resolve(pathComponents.last));
  if (!file.existsSync()) {
    throw ArgumentError("File at '${file.uri}' doesn't exist.");
  }

  final output = contents(file.readAsStringSync());
  file.writeAsStringSync(output);
}