fixes which showing aliases as built-in nushell commands (#9580)

fixes #8577 

# Description
Currently, using `which` on an alias describes it as a nushell built-in
command:
```bash
> alias foo = print "foo!"                                                                                                                                                                                   > which ls foo --all                                                                                                                                                                                        
╭───┬─────┬──────────────────────────┬──────────╮
│ # │ arg │           path           │ built-in │
├───┼─────┼──────────────────────────┼──────────┤
│ 0 │ ls  │ Nushell built-in command │ true     │
│ 1 │ ls  │ /bin/ls                  │ false    │
│ 2 │ foo │ Nushell built-in command │ true     │
╰───┴─────┴──────────────────────────┴──────────╯
```

This PR fixes the behaviour above to the following:
```bash
> alias foo = print "foo!"
> which ls foo --all
╭───┬─────┬──────────────────────────┬──────────╮
│ # │ arg │           path           │ built-in │
├───┼─────┼──────────────────────────┼──────────┤
│ 0 │ ls  │ Nushell built-in command │ true     │
│ 1 │ ls  │ /bin/ls                  │ false    │
│ 2 │ foo │ Nushell alias            │ false    │
╰───┴─────┴──────────────────────────┴──────────╯
```

# User-Facing Changes
Passing in an alias to `which` will no longer return `Nushell built-in
command`, `true` for `path` and `built-in` respectively.

# Tests + Formatting

# After Submitting
This commit is contained in:
Ayush Singh 2023-07-08 09:48:42 +01:00 committed by GitHub
parent 8e38596bc9
commit ad125abf6a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View file

@ -77,6 +77,8 @@ fn get_entry_in_commands(engine_state: &EngineState, name: &str, span: Span) ->
if let Some(decl_id) = engine_state.find_decl(name.as_bytes(), &[]) { if let Some(decl_id) = engine_state.find_decl(name.as_bytes(), &[]) {
let (msg, is_builtin) = if engine_state.get_decl(decl_id).is_custom_command() { let (msg, is_builtin) = if engine_state.get_decl(decl_id).is_custom_command() {
("Nushell custom command", false) ("Nushell custom command", false)
} else if engine_state.get_decl(decl_id).is_alias() {
("Nushell alias", false)
} else { } else {
("Nushell built-in command", true) ("Nushell built-in command", true)
}; };

View file

@ -21,6 +21,19 @@ fn which_alias_ls() {
assert_eq!(actual.out, "Nushell alias: ls -a"); assert_eq!(actual.out, "Nushell alias: ls -a");
} }
#[test]
fn which_custom_alias() {
let actual = nu!(
cwd: ".",
r#"alias foo = print "foo!"; which foo | to nuon"#
);
assert_eq!(
actual.out,
"[[arg, path, built-in]; [foo, \"Nushell alias\", false]]"
);
}
#[test] #[test]
fn which_def_ls() { fn which_def_ls() {
let actual = nu!( let actual = nu!(