Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/completions/flyimport.rs')
-rw-r--r--crates/ide-completion/src/completions/flyimport.rs36
1 files changed, 26 insertions, 10 deletions
diff --git a/crates/ide-completion/src/completions/flyimport.rs b/crates/ide-completion/src/completions/flyimport.rs
index d74d3b264a..446f0be834 100644
--- a/crates/ide-completion/src/completions/flyimport.rs
+++ b/crates/ide-completion/src/completions/flyimport.rs
@@ -263,7 +263,6 @@ fn import_on_the_fly(
ctx.config.prefer_no_std,
ctx.config.prefer_prelude,
)
- .into_iter()
.filter(ns_filter)
.filter(|import| {
let original_item = &import.original_item;
@@ -271,8 +270,14 @@ fn import_on_the_fly(
&& !ctx.is_item_hidden(original_item)
&& ctx.check_stability(original_item.attrs(ctx.db).as_deref())
})
- .sorted_by_key(|located_import| {
- compute_fuzzy_completion_order_key(&located_import.import_path, &user_input_lowercased)
+ .sorted_by(|a, b| {
+ let key = |import_path| {
+ (
+ compute_fuzzy_completion_order_key(import_path, &user_input_lowercased),
+ import_path,
+ )
+ };
+ key(&a.import_path).cmp(&key(&b.import_path))
})
.filter_map(|import| {
render_resolution_with_import(RenderContext::new(ctx), path_ctx, import)
@@ -310,7 +315,6 @@ fn import_on_the_fly_pat_(
ctx.config.prefer_no_std,
ctx.config.prefer_prelude,
)
- .into_iter()
.filter(ns_filter)
.filter(|import| {
let original_item = &import.original_item;
@@ -318,8 +322,14 @@ fn import_on_the_fly_pat_(
&& !ctx.is_item_hidden(original_item)
&& ctx.check_stability(original_item.attrs(ctx.db).as_deref())
})
- .sorted_by_key(|located_import| {
- compute_fuzzy_completion_order_key(&located_import.import_path, &user_input_lowercased)
+ .sorted_by(|a, b| {
+ let key = |import_path| {
+ (
+ compute_fuzzy_completion_order_key(import_path, &user_input_lowercased),
+ import_path,
+ )
+ };
+ key(&a.import_path).cmp(&key(&b.import_path))
})
.filter_map(|import| {
render_resolution_with_import_pat(RenderContext::new(ctx), pattern_ctx, import)
@@ -352,13 +362,18 @@ fn import_on_the_fly_method(
ctx.config.prefer_no_std,
ctx.config.prefer_prelude,
)
- .into_iter()
.filter(|import| {
!ctx.is_item_hidden(&import.item_to_import)
&& !ctx.is_item_hidden(&import.original_item)
})
- .sorted_by_key(|located_import| {
- compute_fuzzy_completion_order_key(&located_import.import_path, &user_input_lowercased)
+ .sorted_by(|a, b| {
+ let key = |import_path| {
+ (
+ compute_fuzzy_completion_order_key(import_path, &user_input_lowercased),
+ import_path,
+ )
+ };
+ key(&a.import_path).cmp(&key(&b.import_path))
})
.for_each(|import| match import.original_item {
ItemInNs::Values(hir::ModuleDef::Function(f)) => {
@@ -407,7 +422,8 @@ fn compute_fuzzy_completion_order_key(
) -> usize {
cov_mark::hit!(certain_fuzzy_order_test);
let import_name = match proposed_mod_path.segments().last() {
- Some(name) => name.to_smol_str().to_lowercase(),
+ // FIXME: nasty alloc, this is a hot path!
+ Some(name) => name.to_smol_str().to_ascii_lowercase(),
None => return usize::MAX,
};
match import_name.match_indices(user_input_lowercased).next() {