findAndRemoveFlag method

FlagFindResult? findAndRemoveFlag(
  1. List<String> args
)

Implementation

FlagFindResult? findAndRemoveFlag(List<String> args) {
  if (long case final longFlag?) {
    final index = args.indexOf(longFlag).asNullableIndex;
    if (index != null) {
      args.removeAt(index);
      return FlagFindResult(index, FlagFindType.long, this);
    }
  }

  if (short case final shortFlag?) {
    final index = args.indexOf(shortFlag).asNullableIndex;
    if (index != null) {
      args.removeAt(index);
      return FlagFindResult(index, FlagFindType.shortStandalone, this);
    }

    for (int i = 0; i < args.length; i++) {
      final arg = args[i];
      if (arg.length < 2) continue;
      if (arg[0] != '-') continue;
      if (arg[1] == '-') continue;
      final newArg = arg.replaceFirst(shortFlag[1], '');
      if (newArg.length < arg.length) {
        if (newArg == '-') {
          args.removeAt(i);
          return FlagFindResult(i, FlagFindType.shortStandalone, this);
        } else {
          args[i] = newArg;
          return FlagFindResult(i, FlagFindType.shortCombined, this);
        }
      }
    }
  }

  return null;
}