aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-12-17 21:19:31 +0000
committerGitHub <[email protected]>2020-12-17 21:19:31 +0000
commita4e17a5a96d3a8c15c91e90adce9d9b8cdc48a46 (patch)
tree977f6be6da7e8b1f5ee668884732a630e0a13fba /crates/completion/src
parentb55cb897e5104ef30a3d13fe36cb97d6bf6a3597 (diff)
parent9d2cbf05e31535cc35d9cd4e8f773f0d78ec3473 (diff)
Merge #6922
6922: Show first fuzzy completions fully containing the input r=matklad a=SomeoneToIgnore Co-authored-by: Kirill Bulatov <[email protected]>
Diffstat (limited to 'crates/completion/src')
-rw-r--r--crates/completion/src/completions/unqualified_path.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/crates/completion/src/completions/unqualified_path.rs b/crates/completion/src/completions/unqualified_path.rs
index b9315f6c0..93869f92e 100644
--- a/crates/completion/src/completions/unqualified_path.rs
+++ b/crates/completion/src/completions/unqualified_path.rs
@@ -126,7 +126,7 @@ fn fuzzy_completion(acc: &mut Completions, ctx: &CompletionContext) -> Option<()
126 let anchor = ctx.name_ref_syntax.as_ref()?; 126 let anchor = ctx.name_ref_syntax.as_ref()?;
127 let import_scope = ImportScope::find_insert_use_container(anchor.syntax(), &ctx.sema)?; 127 let import_scope = ImportScope::find_insert_use_container(anchor.syntax(), &ctx.sema)?;
128 128
129 let possible_imports = imports_locator::find_similar_imports( 129 let mut all_mod_paths = imports_locator::find_similar_imports(
130 &ctx.sema, 130 &ctx.sema,
131 ctx.krate?, 131 ctx.krate?,
132 Some(100), 132 Some(100),
@@ -144,15 +144,24 @@ fn fuzzy_completion(acc: &mut Completions, ctx: &CompletionContext) -> Option<()
144 }) 144 })
145 }) 145 })
146 .filter(|(mod_path, _)| mod_path.len() > 1) 146 .filter(|(mod_path, _)| mod_path.len() > 1)
147 .filter_map(|(import_path, definition)| { 147 .collect::<Vec<_>>();
148
149 all_mod_paths.sort_by_cached_key(|(mod_path, _)| {
150 if let Some(name) = mod_path.segments.last().map(|name| name.to_string().to_lowercase()) {
151 if name.contains(&potential_import_name.to_lowercase()) {
152 return 0;
153 }
154 }
155 1
156 });
157
158 acc.add_all(all_mod_paths.into_iter().filter_map(|(import_path, definition)| {
148 render_resolution_with_import( 159 render_resolution_with_import(
149 RenderContext::new(ctx), 160 RenderContext::new(ctx),
150 ImportEdit { import_path, import_scope: import_scope.clone() }, 161 ImportEdit { import_path, import_scope: import_scope.clone() },
151 &definition, 162 &definition,
152 ) 163 )
153 }); 164 }));
154
155 acc.add_all(possible_imports);
156 Some(()) 165 Some(())
157} 166}
158 167