invokeDefine method

  1. @override
String? invokeDefine(
  1. String name, [
  2. List<String>? args
])
override

Invoke a define with arguments. Maps to: @<name> [args]

Returns the expanded command, or null if define not found.

Implementation

@override
String? invokeDefine(String name, [List<String>? args]) {
  final template = _state.getDefine(name);
  if (template == null) return null;

  var expanded = template;
  final argList = args ?? [];

  // Replace $$ with all args
  expanded = expanded.replaceAll(r'$$', argList.join(' '));

  // Replace $1-$9 with positional args
  for (var i = 1; i <= 9; i++) {
    final arg = i <= argList.length ? argList[i - 1] : '';
    expanded = expanded.replaceAll('\$$i', arg);
  }

  return expanded;
}