run method

Future<void> run(
  1. List<String> arguments
)

Implementation

Future<void> run(List<String> arguments) async {
  _printBanner();

  final parser = ArgParser()
    ..addCommand('scan')
    ..addCommand('build')
    ..addCommand('serve')
    ..addFlag('help', abbr: 'h', negatable: false, help: 'Show help')
    ..addFlag('version', abbr: 'v', negatable: false, help: 'Show version');

  // Add build subcommand options
  parser.commands['build']!
    ..addOption(
      'format',
      abbr: 'f',
      allowed: ['json', 'markdown', 'html'],
      defaultsTo: 'html',
    )
    ..addOption('output', abbr: 'o', defaultsTo: 'docs');

  parser.commands['serve']!
    ..addOption('port', abbr: 'p', defaultsTo: '8080');

  try {
    final results = parser.parse(arguments);

    if (results['help'] as bool) {
      _printHelp(parser);
      return;
    }

    if (results['version'] as bool) {
      _printVersion();
      return;
    }

    if (results.command == null) {
      _printHelp(parser);
      return;
    }

    final command = results.command!;

    switch (command.name) {
      case 'scan':
        await _handleScan(command.rest);
        break;
      case 'build':
        await _handleBuild(command);
        break;
      case 'serve':
        await _handleServe(command);
        break;
    }
  } catch (e) {
    _logger.err('Error: $e');
    exit(1);
  }
}