Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/auto_import.rs')
-rw-r--r--crates/ide-assists/src/handlers/auto_import.rs51
1 files changed, 48 insertions, 3 deletions
diff --git a/crates/ide-assists/src/handlers/auto_import.rs b/crates/ide-assists/src/handlers/auto_import.rs
index 3bd003a267..fe895eb259 100644
--- a/crates/ide-assists/src/handlers/auto_import.rs
+++ b/crates/ide-assists/src/handlers/auto_import.rs
@@ -140,7 +140,7 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<
acc.add_group(
&group_label,
assist_id,
- format!("Import `{}`", import_name),
+ format!("Import `{import_name}`"),
range,
|builder| {
let scope = match scope.clone() {
@@ -165,7 +165,7 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<
acc.add_group(
&group_label,
assist_id,
- format!("Import `{} as _`", import_name),
+ format!("Import `{import_name} as _`"),
range,
|builder| {
let scope = match scope.clone() {
@@ -272,8 +272,10 @@ fn module_distance_heuristic(db: &dyn HirDatabase, current: &Module, item: &Modu
// cost of importing from another crate
let crate_boundary_cost = if current.krate() == item.krate() {
0
- } else if item.krate().is_builtin(db) {
+ } else if item.krate().origin(db).is_local() {
2
+ } else if item.krate().is_builtin(db) {
+ 3
} else {
4
};
@@ -366,6 +368,49 @@ pub struct HashMap;
}
#[test]
+ fn prefer_workspace() {
+ let before = r"
+//- /main.rs crate:main deps:foo,bar
+HashMap$0::new();
+
+//- /lib.rs crate:foo
+pub mod module {
+ pub struct HashMap;
+}
+
+//- /lib.rs crate:bar library
+pub struct HashMap;
+ ";
+
+ check_auto_import_order(before, &["Import `foo::module::HashMap`", "Import `bar::HashMap`"])
+ }
+
+ #[test]
+ fn prefer_non_local_over_long_path() {
+ let before = r"
+//- /main.rs crate:main deps:foo,bar
+HashMap$0::new();
+
+//- /lib.rs crate:foo
+pub mod deeply {
+ pub mod nested {
+ pub mod module {
+ pub struct HashMap;
+ }
+ }
+}
+
+//- /lib.rs crate:bar library
+pub struct HashMap;
+ ";
+
+ check_auto_import_order(
+ before,
+ &["Import `bar::HashMap`", "Import `foo::deeply::nested::module::HashMap`"],
+ )
+ }
+
+ #[test]
fn not_applicable_if_scope_inside_macro() {
check_assist_not_applicable(
auto_import,