mirror of
https://github.com/nushell/nushell.git
synced 2024-11-25 18:03:51 +01:00
Fix defaulting alias var values (#2631)
This commit is contained in:
parent
4201f48be5
commit
0adf2accdd
@ -4,7 +4,7 @@ use crate::prelude::*;
|
||||
|
||||
use derive_new::new;
|
||||
use nu_errors::ShellError;
|
||||
use nu_protocol::{hir::Block, Scope, Signature, SyntaxShape};
|
||||
use nu_protocol::{hir::Block, Scope, Signature, SyntaxShape, UntaggedValue};
|
||||
|
||||
#[derive(new, Clone)]
|
||||
pub struct AliasCommand {
|
||||
@ -51,12 +51,24 @@ impl WholeStreamCommand for AliasCommand {
|
||||
let evaluated = call_info.evaluate(®istry).await?;
|
||||
|
||||
let mut vars = IndexMap::new();
|
||||
|
||||
let mut num_positionals = 0;
|
||||
if let Some(positional) = &evaluated.args.positional {
|
||||
num_positionals = positional.len();
|
||||
for (pos, arg) in positional.iter().enumerate() {
|
||||
vars.insert(alias_command.args[pos].0.to_string(), arg.clone());
|
||||
}
|
||||
}
|
||||
|
||||
if alias_command.args.len() > num_positionals {
|
||||
for idx in 0..(alias_command.args.len() - num_positionals) {
|
||||
vars.insert(
|
||||
alias_command.args[idx + num_positionals].0.to_string(),
|
||||
UntaggedValue::nothing().into_untagged_value(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let scope = Scope::append_vars(scope, vars);
|
||||
|
||||
// FIXME: we need to patch up the spans to point at the top-level error
|
||||
|
@ -16,6 +16,21 @@ fn alias_args_work() {
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn alias_missing_args_work() {
|
||||
Playground::setup("append_test_1", |dirs, _| {
|
||||
let actual = nu!(
|
||||
cwd: dirs.root(),
|
||||
r#"
|
||||
alias double_echo [a b] {^echo $a $b}
|
||||
double_echo bob
|
||||
"#
|
||||
);
|
||||
|
||||
assert_eq!(actual.out, "bob");
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(not(windows))]
|
||||
fn alias_parses_path_tilde() {
|
||||
|
Loading…
Reference in New Issue
Block a user