splitSelectorFromArgs function
Split selector from remaining arguments.
Implementation
({String selectorExpression, List<String> rest})? splitSelectorFromArgs(
List<String> args, {
bool preferTrailingValue = false,
}) {
if (args.isEmpty) return null;
var i = 0;
final boundaries = <int>[];
while (i < args.length && isSelectorToken(args[i])) {
i += 1;
final candidate = args.sublist(0, i).join(' ').trim();
if (candidate.isEmpty) continue;
if (tryParseSelectorChain(candidate) != null) {
boundaries.add(i);
}
}
if (boundaries.isEmpty) return null;
var boundary = boundaries.last;
if (preferTrailingValue) {
for (var i = boundaries.length - 1; i >= 0; i -= 1) {
if (boundaries[i] < args.length) {
boundary = boundaries[i];
break;
}
}
}
final selectorExpression = args.sublist(0, boundary).join(' ').trim();
if (selectorExpression.isEmpty) return null;
return (selectorExpression: selectorExpression, rest: args.sublist(boundary));
}