generateDartParameterMethod static method

String generateDartParameterMethod(
  1. String methodName,
  2. String scriptContent,
  3. List<ShellParameter> parameters,
  4. bool allowRawParameters,
)

Generates Dart code for creating a script with parameters

Implementation

static String generateDartParameterMethod(
  String methodName,
  String scriptContent,
  List<ShellParameter> parameters,
  bool allowRawParameters,
) {
  final buffer = StringBuffer();

  // Generate method signature
  buffer.write('  String $methodName(');

  final hasParameters = parameters.isNotEmpty || allowRawParameters;

  if (hasParameters) {
    buffer.writeln('{');

    // Add typed parameters
    for (int i = 0; i < parameters.length; i++) {
      final param = parameters[i];
      final paramType = param.type == ParameterType.flag ? 'bool' : 'String';

      if (param.required) {
        buffer.write('    required $paramType ${param.name}');
      } else {
        final defaultValue = param.type == ParameterType.flag
            ? 'false'
            : (param.defaultValue != null
                ? "'${param.defaultValue}'"
                : 'null');
        buffer.write('    $paramType? ${param.name} = $defaultValue');
      }

      if (i < parameters.length - 1 || allowRawParameters) {
        buffer.writeln(',');
      } else {
        buffer.writeln();
      }
    }

    // Add raw parameters option
    if (allowRawParameters) {
      buffer.writeln('    String? rawParameters,');
    }

    buffer.write('  }');
  }

  buffer.writeln(') {');

  // Generate method body
  buffer.writeln('    final args = <String>[];');

  // Process typed parameters
  for (final param in parameters) {
    if (param.type == ParameterType.flag) {
      buffer.writeln(
          '    if (${param.name} == true) args.add("-${param.flag}");');
    } else {
      buffer.writeln('    if (${param.name} != null) {');
      buffer.writeln('      args.add("-${param.flag}");');
      buffer.writeln('      args.add(${param.name}!);');
      buffer.writeln('    }');
    }
  }

  // Process raw parameters
  if (allowRawParameters) {
    buffer.writeln(
        '    if (rawParameters != null && rawParameters.isNotEmpty) {');
    buffer.writeln('      args.addAll(_parseRawParameters(rawParameters));');
    buffer.writeln('    }');
  }

  buffer.writeln('    return _buildScriptWithArgs($scriptContent, args);');
  buffer.writeln('  }');

  return buffer.toString();
}