mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 20:17:44 +02:00
Fix completion on $nu
to show correct menus (#8919)
I'm still new to nushell and Rust, so please let me know if there are any omissions and/or mistakes. # Description fixed #8863 `$nu` completion shows wrong completion menus at this time. This PR fixes the problem to show the correct ones. # User-Facing Changes Users can use the correct menus on `$nu` completion like this [recording](https://asciinema.org/a/KCwfpdAoMFsQODFBnb3NwmufC). # Tests + Formatting ``` $ use toolkit.nu $ toolkit check pr - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` ``` # After Submitting nothing
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
use crate::completions::{Completer, CompletionOptions};
|
||||
use nu_engine::eval_variable;
|
||||
use nu_engine::{column::get_columns, eval_variable};
|
||||
use nu_protocol::{
|
||||
engine::{EngineState, Stack, StateWorkingSet},
|
||||
Span, Value,
|
||||
@ -267,7 +267,19 @@ fn nested_suggestions(
|
||||
|
||||
output
|
||||
}
|
||||
Value::List { vals, span: _ } => {
|
||||
for column_name in get_columns(vals.iter()) {
|
||||
output.push(Suggestion {
|
||||
value: column_name,
|
||||
description: None,
|
||||
extra: None,
|
||||
span: current_span,
|
||||
append_whitespace: false,
|
||||
});
|
||||
}
|
||||
|
||||
output
|
||||
}
|
||||
_ => output,
|
||||
}
|
||||
}
|
||||
@ -295,6 +307,38 @@ fn recursive_value(val: Value, sublevels: Vec<Vec<u8>>) -> Value {
|
||||
span: Span::unknown(),
|
||||
};
|
||||
}
|
||||
Value::LazyRecord { val, span: _ } => {
|
||||
for col in val.column_names() {
|
||||
if col.as_bytes().to_vec() == next_sublevel {
|
||||
return recursive_value(
|
||||
val.get_column_value(col).unwrap_or_default(),
|
||||
sublevels.into_iter().skip(1).collect(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Current sublevel value not found
|
||||
return Value::Nothing {
|
||||
span: Span::unknown(),
|
||||
};
|
||||
}
|
||||
Value::List { vals, span } => {
|
||||
for col in get_columns(vals.iter()) {
|
||||
if col.as_bytes().to_vec() == next_sublevel {
|
||||
return recursive_value(
|
||||
Value::List { vals, span }
|
||||
.get_data_by_key(&col)
|
||||
.unwrap_or_default(),
|
||||
sublevels.into_iter().skip(1).collect(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Current sublevel value not found
|
||||
return Value::Nothing {
|
||||
span: Span::unknown(),
|
||||
};
|
||||
}
|
||||
_ => return val,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user