mirror of
https://github.com/nushell/nushell.git
synced 2025-06-08 11:06:55 +02:00
fix(which): remove required positional argument to allow spread input (#15870)
## Summary This PR removes the required positional argument from the `which` command, allowing it to accept input via the spread (`...`) operator. This enables expressions like: ```nu [notepad cmd] | which ...$in ``` Previously, this failed due to a missing required positional argument. The Nushell runtime already handles empty input gracefully, so the change aligns with existing behavior. --- ## Motivation Making `which` compatible with splatted input improves composability and aligns with user expectations in scriptable environments. It supports patterns where the input may be constructed dynamically or piped in from earlier commands. --- ## Changes * Removed the `required` attribute from the positional argument in the `which` command signature. * No additional runtime logic required since empty input is handled gracefully already. --- ## Examples ### Before ```nu [notepad cmd] | which ...$in # ❌ Error: Missing required positional argument ``` ### After ```nu [notepad cmd] | which ...$in # ✅ Executes correctly ``` --- ## Testing * Ran `cargo test --all` and `cargo test -p nu-command` * Manually tested using spread input with the `which` command * Confirmed that empty and non-empty inputs behave correctly --- ## Related Issues Closes [[#15801](https://github.com/nushell/nushell/issues/15801)](https://github.com/nushell/nushell/issues/15801) --------- Co-authored-by: Kumar Ujjawal <kumar.ujjawal@greenpista.com>
This commit is contained in:
parent
bdc7cdbcc4
commit
179ea5ae87
@ -14,8 +14,7 @@ impl Command for Which {
|
|||||||
Signature::build("which")
|
Signature::build("which")
|
||||||
.input_output_types(vec![(Type::Nothing, Type::table())])
|
.input_output_types(vec![(Type::Nothing, Type::table())])
|
||||||
.allow_variants_without_examples(true)
|
.allow_variants_without_examples(true)
|
||||||
.required("application", SyntaxShape::String, "Application.")
|
.rest("applications", SyntaxShape::String, "Application(s).")
|
||||||
.rest("rest", SyntaxShape::String, "Additional applications.")
|
|
||||||
.switch("all", "list all executables", Some('a'))
|
.switch("all", "list all executables", Some('a'))
|
||||||
.category(Category::System)
|
.category(Category::System)
|
||||||
}
|
}
|
||||||
|
@ -105,3 +105,16 @@ fn do_not_show_hidden_commands() {
|
|||||||
let length: i32 = actual.out.parse().unwrap();
|
let length: i32 = actual.out.parse().unwrap();
|
||||||
assert_eq!(length, 0);
|
assert_eq!(length, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn which_accepts_spread_list() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: ".", // or any valid path
|
||||||
|
r#"
|
||||||
|
let apps = [ls];
|
||||||
|
$apps | which ...$in | get command.0
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "ls");
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user