execute method

  1. @override
Future<CommandResult> execute(
  1. String args,
  2. ToolUseContext context
)
override

Execute the command.

Implementation

@override
Future<CommandResult> execute(String args, ToolUseContext context) async {
  final parts = args.trim().split(RegExp(r'\s+'));
  final subcommand = parts.isNotEmpty && parts[0].isNotEmpty
      ? parts[0]
      : 'status';

  switch (subcommand) {
    case 'status':
      final ide = getConnectedIde();
      if (ide == null) {
        return const TextCommandResult(
          'No IDE connected.\n'
          'Connect with: /ide connect <vscode|jetbrains|neovim|emacs>',
        );
      }
      return TextCommandResult('Connected to: $ide');
    case 'connect':
      if (parts.length < 2) {
        return TextCommandResult(
          'Usage: /ide connect <ide>\n'
          'Supported: ${_supportedIdes.join(", ")}',
        );
      }
      final ide = parts[1].toLowerCase();
      if (!_supportedIdes.contains(ide)) {
        return TextCommandResult(
          'Unsupported IDE: $ide\n'
          'Supported: ${_supportedIdes.join(", ")}',
        );
      }
      final success = await connectIde(ide);
      if (success) {
        return TextCommandResult('Connected to $ide.');
      }
      return TextCommandResult(
        'Failed to connect to $ide. Ensure the extension is installed.',
      );
    case 'disconnect':
      disconnectIde();
      return const TextCommandResult('IDE disconnected.');
    default:
      return TextCommandResult(
        'Unknown subcommand: $subcommand\n'
        'Usage: /ide [status|connect <ide>|disconnect]',
      );
  }
}