mirror of
https://github.com/nushell/nushell
synced 2024-12-30 15:03:25 +00:00
a1f989caf9
related to - https://github.com/nushell/nushell/issues/9637#issuecomment-1629387548 # Description this PR changes the output of `which` from `table<arg: string, path: string, built-in: bool> (stream)` to `table<command: string, path: string, type: string> (stream)`. - `command`: same as `arg` but more explicit name - `path`: same as before, `null` when built-in - `type`: instead of `buil-in: bool` says if it's a `built-in` a `custom` command, an `alias` or an `external` # User-Facing Changes the output of `which` has changed ## some examples ```nushell > which open ╭───┬─────────┬──────┬──────────╮ │ # │ command │ path │ type │ ├───┼─────────┼──────┼──────────┤ │ 0 │ open │ │ built-in │ ╰───┴─────────┴──────┴──────────╯ ``` ```nushell > alias foo = print "foo" > which foo ╭───┬─────────┬──────┬───────╮ │ # │ command │ path │ type │ ├───┼─────────┼──────┼───────┤ │ 0 │ foo │ │ alias │ ╰───┴─────────┴──────┴───────╯ ``` ```nushell > def bar [] {} > which bar ╭───┬─────────┬──────┬────────╮ │ # │ command │ path │ type │ ├───┼─────────┼──────┼────────┤ │ 0 │ bar │ │ custom │ ╰───┴─────────┴──────┴────────╯ ``` ```nushell > which git ╭───┬─────────┬──────────────┬──────────╮ │ # │ command │ path │ type │ ├───┼─────────┼──────────────┼──────────┤ │ 0 │ git │ /usr/bin/git │ external │ ╰───┴─────────┴──────────────┴──────────╯ ``` ```nushell > which open git foo bar ╭───┬─────────┬──────────────┬──────────╮ │ # │ command │ path │ type │ ├───┼─────────┼──────────────┼──────────┤ │ 0 │ open │ │ built-in │ │ 1 │ git │ /usr/bin/git │ external │ │ 2 │ foo │ │ alias │ │ 3 │ bar │ │ custom │ ╰───┴─────────┴──────────────┴──────────╯ ``` # Tests + Formatting - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - ⚫ `toolkit test` - ⚫ `toolkit test stdlib` # After Submitting mention that in the release note
107 lines
2.7 KiB
Rust
107 lines
2.7 KiB
Rust
use nu_test_support::nu;
|
|
|
|
#[test]
|
|
fn which_ls() {
|
|
let actual = nu!("which ls | get type.0");
|
|
|
|
assert_eq!(actual.out, "built-in");
|
|
}
|
|
|
|
#[ignore = "TODO: Can't have alias recursion"]
|
|
#[test]
|
|
fn which_alias_ls() {
|
|
let actual = nu!("alias ls = ls -a; which ls | get path.0 | str trim");
|
|
|
|
assert_eq!(actual.out, "Nushell alias: ls -a");
|
|
}
|
|
|
|
#[test]
|
|
fn which_custom_alias() {
|
|
let actual = nu!(r#"alias foo = print "foo!"; which foo | to nuon"#);
|
|
|
|
assert_eq!(actual.out, r#"[[command, path, type]; [foo, "", alias]]"#);
|
|
}
|
|
|
|
#[test]
|
|
fn which_def_ls() {
|
|
let actual = nu!("def ls [] {echo def}; which ls | get type.0");
|
|
|
|
assert_eq!(actual.out, "custom");
|
|
}
|
|
|
|
#[ignore = "TODO: Can't have alias with the same name as command"]
|
|
#[test]
|
|
fn correct_precedence_alias_def_custom() {
|
|
let actual =
|
|
nu!("def ls [] {echo def}; alias ls = echo alias; which ls | get path.0 | str trim");
|
|
|
|
assert_eq!(actual.out, "Nushell alias: echo alias");
|
|
}
|
|
|
|
#[ignore = "TODO: Can't have alias with the same name as command"]
|
|
#[test]
|
|
fn multiple_reports_for_alias_def_custom() {
|
|
let actual = nu!("def ls [] {echo def}; alias ls = echo alias; which -a ls | length");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert!(length >= 2);
|
|
}
|
|
|
|
// `get_aliases_with_name` and `get_custom_commands_with_name` don't return the correct count of
|
|
// values
|
|
// I suspect this is due to the ScopeFrame getting discarded at '}' and the command is then
|
|
// executed in the parent scope
|
|
// See: parse_definition, line 2187 for reference.
|
|
#[ignore]
|
|
#[test]
|
|
fn correctly_report_of_shadowed_alias() {
|
|
let actual = nu!("alias xaz = echo alias1
|
|
def helper [] {
|
|
alias xaz = echo alias2
|
|
which -a xaz
|
|
}
|
|
helper | get path | str contains alias2");
|
|
|
|
assert_eq!(actual.out, "true");
|
|
}
|
|
|
|
#[test]
|
|
fn one_report_of_multiple_defs() {
|
|
let actual = nu!("def xaz [] { echo def1 }
|
|
def helper [] {
|
|
def xaz [] { echo def2 }
|
|
which -a xaz
|
|
}
|
|
helper | length");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 1);
|
|
}
|
|
|
|
#[test]
|
|
fn def_only_seen_once() {
|
|
let actual = nu!("def xaz [] {echo def1}; which -a xaz | length");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 1);
|
|
}
|
|
|
|
#[test]
|
|
fn do_not_show_hidden_aliases() {
|
|
let actual = nu!("alias foo = echo foo
|
|
hide foo
|
|
which foo | length");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn do_not_show_hidden_commands() {
|
|
let actual = nu!("def foo [] { echo foo }
|
|
hide foo
|
|
which foo | length");
|
|
|
|
let length: i32 = actual.out.parse().unwrap();
|
|
assert_eq!(length, 0);
|
|
}
|