fix argument type (#5695)

* fix argument type

* while run external, convert list argument to str

* fix argument converting logic

* using parse_list_expression instead of parse_full_cell_path

* make parsing logic more explicit

* revert changes

* add tests
This commit is contained in:
WindSoilder
2022-06-06 18:19:06 +08:00
committed by GitHub
parent 17a5aa3052
commit 75b2d26187
3 changed files with 46 additions and 14 deletions

View File

@ -69,20 +69,24 @@ impl Command for External {
})
}
let args = args
.into_iter()
.flat_map(|arg| match arg {
Value::List { vals, .. } => vals
.into_iter()
.map(value_as_spanned)
.collect::<Vec<Result<Spanned<String>, ShellError>>>(),
val => vec![value_as_spanned(val)],
})
.collect::<Result<Vec<Spanned<String>>, ShellError>>()?;
let mut spanned_args = vec![];
for one_arg in args {
match one_arg {
Value::List { vals, .. } => {
// turn all the strings in the array into params.
// Example: one_arg may be something like ["ls" "-a"]
// convert it to "ls" "-a"
for v in vals {
spanned_args.push(value_as_spanned(v)?)
}
}
val => spanned_args.push(value_as_spanned(val)?),
}
}
let command = ExternalCommand {
name,
args,
args: spanned_args,
redirect_stdout,
redirect_stderr,
env_vars: env_vars_str,