Skip to content

Commit

Permalink
Auto merge of #17308 - mathew-horner:prefer-workspace, r=Veykril
Browse files Browse the repository at this point in the history
Add preference modifier for workspace-local crates when using auto import.

`@joshka` pointed out some odd behavior of auto import ordering. It doesn't seem that the current heuristics were applying any sort of precedence to imports from the workspace. I've went ahead and added that.

I hope to get some feedback on the modifier numbers here. I just went with something that felt like it balanced giving more power to workspace crates without completely ignoring relative path distance.

closes rust-lang/rust-analyzer#17303
  • Loading branch information
bors committed Jun 7, 2024
2 parents 07034ff + c07530c commit 1eda1ae
Showing 1 changed file with 46 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit 1eda1ae

Please sign in to comment.