mirror of
https://github.com/nushell/nushell.git
synced 2025-07-01 07:00:37 +02:00
Also fix the flag params
This commit is contained in:
@ -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) => {
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user