Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-assists/src/handlers/auto_import.rs47
1 files changed, 46 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/auto_import.rs b/crates/ide-assists/src/handlers/auto_import.rs
index 650b4279ea..fe895eb259 100644
--- a/crates/ide-assists/src/handlers/auto_import.rs
+++ b/crates/ide-assists/src/handlers/auto_import.rs
@@ -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,