From 31ce8c1e33549dd912aafed334d1c7394917eccc Mon Sep 17 00:00:00 2001 From: JT Date: Tue, 5 Oct 2021 15:46:24 +1300 Subject: [PATCH] Variable completions and better ls --- crates/nu-cli/src/completions.rs | 34 +++++++++++++++++++ crates/nu-command/src/filesystem/ls.rs | 3 ++ crates/nu-protocol/src/engine/engine_state.rs | 4 +-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/crates/nu-cli/src/completions.rs b/crates/nu-cli/src/completions.rs index 27ff57a6f..57298d093 100644 --- a/crates/nu-cli/src/completions.rs +++ b/crates/nu-cli/src/completions.rs @@ -32,6 +32,40 @@ impl Completer for NuCompleter { for flat in flattened { if pos >= flat.0.start && pos <= flat.0.end { + let prefix = working_set.get_span_contents(flat.0); + if prefix.starts_with(b"$") { + let mut output = vec![]; + + for scope in &working_set.delta.scope { + for v in &scope.vars { + if v.0.starts_with(prefix) { + output.push(( + reedline::Span { + start: flat.0.start - offset, + end: flat.0.end - offset, + }, + String::from_utf8_lossy(v.0).to_string(), + )); + } + } + } + for scope in &engine_state.scope { + for v in &scope.vars { + if v.0.starts_with(prefix) { + output.push(( + reedline::Span { + start: flat.0.start - offset, + end: flat.0.end - offset, + }, + String::from_utf8_lossy(v.0).to_string(), + )); + } + } + } + + return output; + } + match &flat.1 { nu_parser::FlatShape::Custom(custom_completion) => { let prefix = working_set.get_span_contents(flat.0).to_vec(); diff --git a/crates/nu-command/src/filesystem/ls.rs b/crates/nu-command/src/filesystem/ls.rs index 5e3ab2e2b..36fbaff74 100644 --- a/crates/nu-command/src/filesystem/ls.rs +++ b/crates/nu-command/src/filesystem/ls.rs @@ -36,6 +36,9 @@ impl Command for Ls { let path = std::path::Path::new(&result); if path.is_dir() { + if !result.ends_with(std::path::MAIN_SEPARATOR) { + result.push(std::path::MAIN_SEPARATOR); + } result.push('*'); } diff --git a/crates/nu-protocol/src/engine/engine_state.rs b/crates/nu-protocol/src/engine/engine_state.rs index c5cd67986..3d8f2c822 100644 --- a/crates/nu-protocol/src/engine/engine_state.rs +++ b/crates/nu-protocol/src/engine/engine_state.rs @@ -12,12 +12,12 @@ pub struct EngineState { vars: Vec, decls: Vec>, blocks: Vec, - scope: Vec, + pub scope: Vec, } #[derive(Debug)] pub struct ScopeFrame { - vars: HashMap, VarId>, + pub vars: HashMap, VarId>, decls: HashMap, DeclId>, aliases: HashMap, Vec>, modules: HashMap, BlockId>,