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.rs42
1 files changed, 21 insertions, 21 deletions
diff --git a/crates/ide-completion/src/completions/flyimport.rs b/crates/ide-completion/src/completions/flyimport.rs
index afa94affb3..3b2b2fd706 100644
--- a/crates/ide-completion/src/completions/flyimport.rs
+++ b/crates/ide-completion/src/completions/flyimport.rs
@@ -8,6 +8,7 @@ use itertools::Itertools;
use syntax::{ast, AstNode, SyntaxNode, ToSmolStr, T};
use crate::{
+ config::AutoImportExclusionType,
context::{
CompletionContext, DotAccess, PathCompletionCtx, PathKind, PatternContext, Qualified,
TypeLocation,
@@ -258,8 +259,6 @@ fn import_on_the_fly(
let import_cfg = ctx.config.import_path_config();
- let completed_name = ctx.token.to_string();
-
import_assets
.search_for_imports(&ctx.sema, import_cfg, ctx.config.insert_use.prefix_kind)
.filter(ns_filter)
@@ -270,19 +269,17 @@ fn import_on_the_fly(
&& ctx.check_stability(original_item.attrs(ctx.db).as_deref())
})
.filter(|import| {
- if let ModuleDef::Trait(trait_) = import.item_to_import.into_module_def() {
- let excluded = ctx.exclude_flyimport_traits.contains(&trait_);
- let trait_itself_imported = import.item_to_import == import.original_item;
- if !excluded || trait_itself_imported {
- return true;
+ let def = import.item_to_import.into_module_def();
+ if let Some(&kind) = ctx.exclude_flyimport.get(&def) {
+ if kind == AutoImportExclusionType::Always {
+ return false;
+ }
+ let method_imported = import.item_to_import != import.original_item;
+ if method_imported {
+ return false;
}
-
- let item = import.original_item.into_module_def();
- // Filter that item out, unless its name matches the name the user wrote exactly - in which case preserve it.
- item.name(ctx.db).is_some_and(|name| name.eq_ident(&completed_name))
- } else {
- true
}
+ true
})
.sorted_by(|a, b| {
let key = |import_path| {
@@ -363,8 +360,6 @@ fn import_on_the_fly_method(
let cfg = ctx.config.import_path_config();
- let completed_name = ctx.token.to_string();
-
import_assets
.search_for_imports(&ctx.sema, cfg, ctx.config.insert_use.prefix_kind)
.filter(|import| {
@@ -372,14 +367,19 @@ fn import_on_the_fly_method(
&& !ctx.is_item_hidden(&import.original_item)
})
.filter(|import| {
- if let ModuleDef::Trait(trait_) = import.item_to_import.into_module_def() {
- if !ctx.exclude_flyimport_traits.contains(&trait_) {
- return true;
+ let def = import.item_to_import.into_module_def();
+ if let Some(&kind) = ctx.exclude_flyimport.get(&def) {
+ if kind == AutoImportExclusionType::Always {
+ return false;
}
+ let method_imported = import.item_to_import != import.original_item;
+ if method_imported {
+ return false;
+ }
+ }
- let item = import.original_item.into_module_def();
- // Filter that method out, unless its name matches the name the user wrote exactly - in which case preserve it.
- item.name(ctx.db).is_some_and(|name| name.eq_ident(&completed_name))
+ if let ModuleDef::Trait(_) = import.item_to_import.into_module_def() {
+ !ctx.exclude_flyimport.contains_key(&def)
} else {
true
}