resolvePreset function

PresetResult resolvePreset({
  1. required ArgResults results,
  2. required List<String> arguments,
  3. required ArgParser parser,
  4. required List<String> commandPath,
})

Resolves a preset if --preset was specified in the parsed results.

If no preset is specified, returns results unchanged with resolvedArguments set to null.

Otherwise, loads the config file, finds the named preset for the given commandPath, converts it to CLI arguments, prepends them before the original arguments, and re-parses with parser.

This ensures CLI arguments override preset values for single-value options, and accumulate with preset values for multi-options.

Exits with code 1 and prints an error if the config file is missing or the preset is not found.

Implementation

PresetResult resolvePreset({
  required ArgResults results,
  required List<String> arguments,
  required ArgParser parser,
  required List<String> commandPath,
}) {
  final presetName = results.option('preset');
  if (presetName == null) {
    return (results: results, resolvedArguments: null);
  }

  try {
    final config = loadConfigFile();
    if (config == null) {
      stderr.writeln(
        'Error: --preset requires a buggy.yaml (or buggy.yml) file '
        'in the current directory, but none was found.',
      );
      exit(1);
    }

    final preset = findPreset(config, commandPath, presetName);
    final presetArgs = presetToArguments(preset);
    final mergedArguments = [...presetArgs, ...arguments];

    return (
      results: parser.parse(mergedArguments),
      resolvedArguments: mergedArguments,
    );
  } on FormatException catch (e) {
    stderr.writeln('Error: ${e.message}');
    exit(1);
  }
}