mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 22:27:43 +02:00
Allow vars and subexprs in extern args
This commit is contained in:
@ -67,7 +67,19 @@ pub fn flatten_expression(
|
||||
let mut output = vec![(*name, FlatShape::External)];
|
||||
|
||||
for arg in args {
|
||||
output.push((*arg, FlatShape::ExternalArg));
|
||||
//output.push((*arg, FlatShape::ExternalArg));
|
||||
match arg {
|
||||
Expression {
|
||||
expr: Expr::String(..),
|
||||
span,
|
||||
..
|
||||
} => {
|
||||
output.push((*span, FlatShape::ExternalArg));
|
||||
}
|
||||
_ => {
|
||||
output.extend(flatten_expression(working_set, arg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output
|
||||
|
@ -104,14 +104,28 @@ pub fn check_name<'a>(
|
||||
}
|
||||
|
||||
pub fn parse_external_call(
|
||||
_working_set: &mut StateWorkingSet,
|
||||
working_set: &mut StateWorkingSet,
|
||||
spans: &[Span],
|
||||
) -> (Expression, Option<ParseError>) {
|
||||
// TODO: add external parsing
|
||||
let mut args = vec![];
|
||||
let name = spans[0];
|
||||
let mut error = None;
|
||||
|
||||
for span in &spans[1..] {
|
||||
args.push(*span);
|
||||
let contents = working_set.get_span_contents(*span);
|
||||
|
||||
if contents.starts_with(b"$") || contents.starts_with(b"(") {
|
||||
let (arg, err) = parse_expression(working_set, &[*span], true);
|
||||
error = error.or(err);
|
||||
args.push(arg);
|
||||
} else {
|
||||
args.push(Expression {
|
||||
expr: Expr::String(String::from_utf8_lossy(contents).to_string()),
|
||||
span: *span,
|
||||
ty: Type::String,
|
||||
custom_completion: None,
|
||||
})
|
||||
}
|
||||
}
|
||||
(
|
||||
Expression {
|
||||
@ -120,7 +134,7 @@ pub fn parse_external_call(
|
||||
ty: Type::Unknown,
|
||||
custom_completion: None,
|
||||
},
|
||||
None,
|
||||
error,
|
||||
)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user