diff options
| author | Mathew Horner <matt@phylum.io> | 2024-05-28 23:05:27 -0500 |
|---|---|---|
| committer | Mathew Horner <matt@phylum.io> | 2024-05-28 23:05:27 -0500 |
| commit | c07530c580d246441ff1f65de2b775f3d5631058 (patch) | |
| tree | b3741f8fa27eb4d0de3415798c467944e5213d79 | |
| parent | c1b051602ce2f6844fd703cad0146ed5ea8185e6 (diff) | |
| download | rust-c07530c580d246441ff1f65de2b775f3d5631058.tar.gz rust-c07530c580d246441ff1f65de2b775f3d5631058.zip | |
Add preference modifier for workspace-local crates when using auto import.
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/auto_import.rs | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/auto_import.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/auto_import.rs index 3bd003a267a..4ae7ff4a33c 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/auto_import.rs +++ b/src/tools/rust-analyzer/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, |
