diff --git a/crates/nu-cli/src/completions.rs b/crates/nu-cli/src/completions.rs index 3baceecea..c8777d93d 100644 --- a/crates/nu-cli/src/completions.rs +++ b/crates/nu-cli/src/completions.rs @@ -1,9 +1,9 @@ use nu_engine::eval_call; use nu_parser::{flatten_expression, parse, trim_quotes, FlatShape}; use nu_protocol::{ - ast::{Call, Expr}, + ast::{Call, Expr, Expression}, engine::{EngineState, Stack, StateWorkingSet}, - levenshtein_distance, PipelineData, Span, Value, CONFIG_VARIABLE_ID, + levenshtein_distance, PipelineData, Span, Type, Value, CONFIG_VARIABLE_ID, }; use reedline::{Completer, Suggestion}; @@ -224,8 +224,10 @@ impl NuCompleter { fn completion_helper(&self, line: &str, pos: usize) -> Vec { let mut working_set = StateWorkingSet::new(&self.engine_state); let offset = working_set.next_span_start(); + let current_line_str = line.trim().to_string(); let mut line = line.to_string(); line.insert(pos, 'a'); + let line_pos = pos; let pos = offset + pos; let (output, _err) = parse( &mut working_set, @@ -330,7 +332,20 @@ impl NuCompleter { &Call { decl_id: *decl_id, head: new_span, - positional: vec![], + positional: vec![ + Expression { + span: Span { start: 0, end: 0 }, + ty: Type::String, + expr: Expr::String(current_line_str), + custom_completion: None, + }, + Expression { + span: Span { start: 0, end: 0 }, + ty: Type::Int, + expr: Expr::Int(line_pos as i64), + custom_completion: None, + }, + ], named: vec![], redirect_stdout: true, redirect_stderr: true,