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.rs58
1 files changed, 57 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/auto_import.rs b/crates/ide-assists/src/handlers/auto_import.rs
index ac0bae7cd9..dd082476d2 100644
--- a/crates/ide-assists/src/handlers/auto_import.rs
+++ b/crates/ide-assists/src/handlers/auto_import.rs
@@ -293,7 +293,7 @@ pub(crate) fn relevance_score(
if let Some(ty) = ty {
if ty == *expected {
score = 100000;
- } else if ty.could_unify_with(ctx.db(), expected) {
+ } else if ty.could_unify_with(ctx.db(), &expected.instantiate_with_errors()) {
score = 10000;
}
}
@@ -2037,4 +2037,60 @@ fn baz() {
"Import `foo::Ext` without `as _`",
);
}
+
+ #[test]
+ fn local_enum_variant() {
+ check_assist(
+ auto_import,
+ r#"
+mod foo {
+ pub enum ControlFlow {
+ Continue,
+ }
+}
+
+fn main() {
+ Continue$0;
+}
+ "#,
+ r#"
+use foo::ControlFlow::Continue;
+
+mod foo {
+ pub enum ControlFlow {
+ Continue,
+ }
+}
+
+fn main() {
+ Continue;
+}
+ "#,
+ );
+ }
+
+ #[test]
+ fn foreign_enum_variant() {
+ check_assist(
+ auto_import,
+ r#"
+//- /foo.rs crate:foo
+pub enum ControlFlow {
+ Continue,
+}
+
+//- /main.rs crate:main deps:foo
+fn main() {
+ Continue$0;
+}
+ "#,
+ r#"
+use foo::ControlFlow::Continue;
+
+fn main() {
+ Continue;
+}
+ "#,
+ );
+ }
}