From 4bf51eb49633e556799ceddd146a520cad964788 Mon Sep 17 00:00:00 2001 From: Mathew Horner Date: Tue, 28 May 2024 23:05:27 -0500 Subject: [PATCH] Add preference modifier for workspace-local crates when using auto import. --- .../ide-assists/src/handlers/auto_import.rs | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/crates/ide-assists/src/handlers/auto_import.rs b/crates/ide-assists/src/handlers/auto_import.rs index 3bd003a267..4ae7ff4a33 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 }; @@ -365,6 +367,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(