Some error improvements (#659)

This commit is contained in:
JT
2022-01-04 10:14:33 +11:00
committed by GitHub
parent cb8b7e08a5
commit b6fcd46075
6 changed files with 145 additions and 66 deletions

View File

@ -102,15 +102,42 @@ pub fn check_call(command: Span, sig: &Signature, call: &Call) -> Option<ParseEr
}
});
if !found {
return Some(ParseError::MissingPositional(
argument.name.clone(),
command,
));
if let Some(last) = call.positional.last() {
return Some(ParseError::MissingPositional(
argument.name.clone(),
Span {
start: last.span.end,
end: last.span.end,
},
sig.call_signature(),
));
} else {
return Some(ParseError::MissingPositional(
argument.name.clone(),
command,
sig.call_signature(),
));
}
}
}
let missing = &sig.required_positional[call.positional.len()];
Some(ParseError::MissingPositional(missing.name.clone(), command))
if let Some(last) = call.positional.last() {
Some(ParseError::MissingPositional(
missing.name.clone(),
Span {
start: last.span.end,
end: last.span.end,
},
sig.call_signature(),
))
} else {
Some(ParseError::MissingPositional(
missing.name.clone(),
command,
sig.call_signature(),
))
}
} else {
for req_flag in sig.named.iter().filter(|x| x.required) {
if call.named.iter().all(|(n, _)| n.item != req_flag.long) {
@ -228,7 +255,10 @@ fn parse_long_flag(
(
Some(long_name),
None,
Some(ParseError::MissingFlagParam(arg_span)),
Some(ParseError::MissingFlagParam(
arg_shape.to_string(),
arg_span,
)),
)
}
} else {
@ -467,8 +497,12 @@ pub fn parse_multispan_value(
if *spans_idx >= spans.len() {
error = error.or_else(|| {
Some(ParseError::KeywordMissingArgument(
arg.to_string(),
String::from_utf8_lossy(keyword).into(),
spans[*spans_idx - 1],
Span {
start: spans[*spans_idx - 1].end,
end: spans[*spans_idx - 1].end,
},
))
});
return (
@ -584,7 +618,12 @@ pub fn parse_internal_call(
));
spans_idx += 1;
} else {
error = error.or(Some(ParseError::MissingFlagParam(arg_span)))
error = error.or_else(|| {
Some(ParseError::MissingFlagParam(
arg_shape.to_string(),
arg_span,
))
})
}
} else {
call.named.push((
@ -614,6 +653,7 @@ pub fn parse_internal_call(
Some(ParseError::MissingPositional(
positional.name.clone(),
spans[spans_idx],
signature.call_signature(),
))
});
positional_idx += 1;
@ -646,7 +686,12 @@ pub fn parse_internal_call(
positional_idx += 1;
} else {
call.positional.push(Expression::garbage(arg_span));
error = error.or(Some(ParseError::ExtraPositional(arg_span)))
error = error.or_else(|| {
Some(ParseError::ExtraPositional(
signature.call_signature(),
arg_span,
))
})
}
error = error.or(err);