From c65aaf3fa1ec8443872982a8e7d8740ab6ebd47a Mon Sep 17 00:00:00 2001 From: ysthakur <45539777+ysthakur@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:42:40 -0400 Subject: [PATCH 1/2] Make default completer work on blank lines --- src/completion/default.rs | 48 ++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/completion/default.rs b/src/completion/default.rs index 882debb6..3d523932 100644 --- a/src/completion/default.rs +++ b/src/completion/default.rs @@ -55,26 +55,46 @@ impl Completer for DefaultCompleter { /// assert_eq!( /// completions.complete("bat",3), /// vec![ - /// Suggestion {value: "batcave".into(), description: None, style: None, extra: None, span: Span { start: 0, end: 3 }, append_whitespace: false}, - /// Suggestion {value: "batman".into(), description: None, style: None, extra: None, span: Span { start: 0, end: 3 }, append_whitespace: false}, - /// Suggestion {value: "batmobile".into(), description: None, style: None, extra: None, span: Span { start: 0, end: 3 }, append_whitespace: false}, + /// Suggestion {value: "batcave".into(), span: Span { start: 0, end: 3 }, ..Default::default()}, + /// Suggestion {value: "batman".into(), span: Span { start: 0, end: 3 }, ..Default::default()}, + /// Suggestion {value: "batmobile".into(), span: Span { start: 0, end: 3 }, ..Default::default()}, /// ]); /// /// assert_eq!( /// completions.complete("to the\r\nbat",11), /// vec![ - /// Suggestion {value: "batcave".into(), description: None, style: None, extra: None, span: Span { start: 8, end: 11 }, append_whitespace: false}, - /// Suggestion {value: "batman".into(), description: None, style: None, extra: None, span: Span { start: 8, end: 11 }, append_whitespace: false}, - /// Suggestion {value: "batmobile".into(), description: None, style: None, extra: None, span: Span { start: 8, end: 11 }, append_whitespace: false}, + /// Suggestion {value: "batcave".into(), span: Span { start: 8, end: 11 }, ..Default::default()}, + /// Suggestion {value: "batman".into(), span: Span { start: 8, end: 11 }, ..Default::default()}, + /// Suggestion {value: "batmobile".into(), span: Span { start: 8, end: 11 }, ..Default::default()}, + /// ]); + /// assert_eq!( + /// completions.complete("", 0), + /// vec![ + /// Suggestion {value: "batcave".into(), span: Span { start: 0, end: 0 }, ..Default::default()}, + /// Suggestion {value: "batman".into(), span: Span { start: 0, end: 0 }, ..Default::default()}, + /// Suggestion {value: "batmobile".into(), span: Span { start: 0, end: 0 }, ..Default::default()}, + /// Suggestion {value: "robber".into(), span: Span { start: 0, end: 0 }, ..Default::default()}, + /// Suggestion {value: "robin".into(), span: Span { start: 0, end: 0 }, ..Default::default()}, /// ]); /// ``` fn complete(&mut self, line: &str, pos: usize) -> Vec { let mut span_line_whitespaces = 0; - let mut completions = vec![]; // Trimming in case someone passes in text containing stuff after the cursor, if // `only_buffer_difference` is false let line = if line.len() > pos { &line[..pos] } else { line }; - if !line.is_empty() { + if line.chars().all(|c| c == ' ') { + self.root + .complete("".chars()) + .unwrap_or_default() + .into_iter() + .map(|value| Suggestion { + value, + span: Span::new(pos, pos), + ..Default::default() + }) + .collect() + } else { + let mut completions = vec![]; // When editing a multiline buffer, there can be new line characters in it. // Also, by replacing the new line character with a space, the insert // position is maintain in the line buffer. @@ -105,22 +125,18 @@ impl Completer for DefaultCompleter { Suggestion { value: format!("{span_line}{ext}"), - description: None, - style: None, - extra: None, span, - append_whitespace: false, + ..Default::default() } }) - .filter(|t| t.value.len() > (t.span.end - t.span.start)) - .collect::>(), + .filter(|t| t.value.len() > (t.span.end - t.span.start)), ); } } } + completions.dedup(); + completions } - completions.dedup(); - completions } } From 25a76add5f98208952cc22f0506b994962e74ff2 Mon Sep 17 00:00:00 2001 From: ysthakur <45539777+ysthakur@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:45:26 -0400 Subject: [PATCH 2/2] Throw in a blank line in the doctest --- src/completion/default.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/completion/default.rs b/src/completion/default.rs index 3d523932..bf2681a1 100644 --- a/src/completion/default.rs +++ b/src/completion/default.rs @@ -67,6 +67,7 @@ impl Completer for DefaultCompleter { /// Suggestion {value: "batman".into(), span: Span { start: 8, end: 11 }, ..Default::default()}, /// Suggestion {value: "batmobile".into(), span: Span { start: 8, end: 11 }, ..Default::default()}, /// ]); + /// /// assert_eq!( /// completions.complete("", 0), /// vec![