verify method
Throws a SassScriptException if positional and names aren't valid
for this parameter declaration.
Implementation
void verify(int positional, Set<String> names) {
var namedUsed = 0;
for (var i = 0; i < parameters.length; i++) {
var parameter = parameters[i];
if (i < positional) {
if (names.contains(parameter.name)) {
throw SassScriptException(
"Argument ${_originalParameterName(parameter.name)} was passed "
"both by position and by name.",
);
}
} else if (names.contains(parameter.name)) {
namedUsed++;
} else if (parameter.defaultValue == null) {
throw MultiSpanSassScriptException(
"Missing argument ${_originalParameterName(parameter.name)}.",
"invocation",
{spanWithName: "declaration"},
);
}
}
if (restParameter != null) return;
if (positional > parameters.length) {
throw MultiSpanSassScriptException(
"Only ${parameters.length} "
"${names.isEmpty ? '' : 'positional '}"
"${pluralize('argument', parameters.length)} allowed, but "
"$positional ${pluralize('was', positional, plural: 'were')} "
"passed.",
"invocation",
{spanWithName: "declaration"},
);
}
if (namedUsed < names.length) {
var unknownNames = Set.of(names)
..removeAll(parameters.map((parameter) => parameter.name));
throw MultiSpanSassScriptException(
"No ${pluralize('parameter', unknownNames.length)} named "
"${toSentence(unknownNames.map((name) => "\$$name"), 'or')}.",
"invocation",
{spanWithName: "declaration"},
);
}
}