From 323e2dbed9800c1937a35fe1e7692d381bfb0f20 Mon Sep 17 00:00:00 2001 From: Devyn Cairns Date: Tue, 9 Jul 2024 03:37:49 -0700 Subject: [PATCH] fix handling short-only args. limitation: long args and short args now share the same namespace, effectively --- crates/nu-engine/src/compile/call.rs | 8 ++++++-- crates/nu-engine/src/eval_ir.rs | 10 +++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/nu-engine/src/compile/call.rs b/crates/nu-engine/src/compile/call.rs index bd808c2f1b..5bb4de5a75 100644 --- a/crates/nu-engine/src/compile/call.rs +++ b/crates/nu-engine/src/compile/call.rs @@ -124,8 +124,12 @@ pub(crate) fn compile_call( ast_ref, )) } - Argument::Named((name, _, _)) => compiled_args.push(CompiledArg::Named( - name.item.as_str(), + Argument::Named((name, short, _)) => compiled_args.push(CompiledArg::Named( + if name.item.is_empty() { + &short.as_ref().expect("no long name and no short name").item + } else { + &name.item + }, arg_reg, arg.span(), ast_ref, diff --git a/crates/nu-engine/src/eval_ir.rs b/crates/nu-engine/src/eval_ir.rs index a23f5a7d7d..5b0fcf55ee 100644 --- a/crates/nu-engine/src/eval_ir.rs +++ b/crates/nu-engine/src/eval_ir.rs @@ -968,7 +968,15 @@ fn eval_call( fn find_named_var_id(sig: &Signature, name: &[u8], span: Span) -> Result { sig.named .iter() - .find(|n| n.long.as_bytes() == name) + .find(|n| { + if !n.long.is_empty() { + n.long.as_bytes() == name + } else { + // If the arg has no long name, then compare against its short name + n.short + .is_some_and(|s| s.encode_utf8(&mut [0; 4]).as_bytes() == name) + } + }) .ok_or_else(|| ShellError::IrEvalError { msg: format!( "block does not have an argument named `{}`",