aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 2be6562..1dbd024 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -371,8 +371,9 @@ fn event_loop() {
}
parse::CompletionKind::None => continue,
};
-
+
suggestions.sort_by(|x, y| x.delta.cmp(&y.delta));
+ suggestions.dedup_by(|x, y| x.delta == y.delta);
if suggestions.len() == 0 {
continue;
@@ -386,6 +387,26 @@ fn event_loop() {
continue;
}
+ // find longest shared prefix and type it
+ {
+ let mut longest = &suggestions[0].delta[..];
+ for s in suggestions.iter() {
+ let mut new = longest;
+ for i in 0..longest.len().min(s.delta.len()) {
+ if longest[i] != s.delta[i] {
+ break;
+ } else {
+ new = &s.delta[..=i];
+ }
+ }
+ longest = new;
+ }
+
+ if !longest.is_empty() {
+ se.type_bytes(longest);
+ }
+ }
+
cursor::save();
// one line below