Also fix the flag params

This commit is contained in:
JT
2021-10-12 10:17:45 +13:00
parent 1f45304cf9
commit 96419f168b
6 changed files with 75 additions and 10 deletions

View File

@ -18,6 +18,7 @@ pub enum FlatShape {
Filepath,
GlobPattern,
Variable,
Flag,
Custom(String),
}
@ -61,6 +62,12 @@ pub fn flatten_expression(
for positional in &call.positional {
output.extend(flatten_expression(working_set, positional));
}
for named in &call.named {
output.push((named.0.span, FlatShape::Flag));
if let Some(expr) = &named.1 {
output.extend(flatten_expression(working_set, expr));
}
}
output
}
Expr::ExternalCall(_, name_span, args) => {

View File

@ -57,7 +57,7 @@ fn check_call(command: Span, sig: &Signature, call: &Call) -> Option<ParseError>
Some(ParseError::MissingPositional(missing.name.clone(), command))
} else {
for req_flag in sig.named.iter().filter(|x| x.required) {
if call.named.iter().all(|(n, _)| n != &req_flag.long) {
if call.named.iter().all(|(n, _)| n.item != req_flag.long) {
return Some(ParseError::MissingRequiredFlag(
req_flag.long.clone(),
command,
@ -478,7 +478,13 @@ pub fn parse_internal_call(
if let Some(long_name) = long_name {
// We found a long flag, like --bar
error = error.or(err);
call.named.push((long_name, arg));
call.named.push((
Spanned {
item: long_name,
span: arg_span,
},
arg,
));
spans_idx += 1;
continue;
}
@ -500,13 +506,25 @@ pub fn parse_internal_call(
let (arg, err) = parse_value(working_set, *arg, &arg_shape);
error = error.or(err);
call.named.push((flag.long.clone(), Some(arg)));
call.named.push((
Spanned {
item: flag.long.clone(),
span: spans[spans_idx],
},
Some(arg),
));
spans_idx += 1;
} else {
error = error.or(Some(ParseError::MissingFlagParam(arg_span)))
}
} else {
call.named.push((flag.long.clone(), None));
call.named.push((
Spanned {
item: flag.long.clone(),
span: spans[spans_idx],
},
None,
));
}
}
spans_idx += 1;