Unnamed repository; edit this file 'description' to name the repository.
use `check_assist_by_label` to pick assist
Young-Flash 2023-10-31
parent a723acf · commit 929544e
-rw-r--r--crates/ide-assists/src/handlers/auto_import.rs220
1 files changed, 213 insertions, 7 deletions
diff --git a/crates/ide-assists/src/handlers/auto_import.rs b/crates/ide-assists/src/handlers/auto_import.rs
index a2efa4d10b..cafd57a977 100644
--- a/crates/ide-assists/src/handlers/auto_import.rs
+++ b/crates/ide-assists/src/handlers/auto_import.rs
@@ -287,7 +287,8 @@ mod tests {
};
use crate::tests::{
- check_assist, check_assist_not_applicable, check_assist_target, TEST_CONFIG,
+ check_assist, check_assist_by_label, check_assist_not_applicable, check_assist_target,
+ TEST_CONFIG,
};
fn check_auto_import_order(before: &str, order: &[&str]) {
@@ -739,7 +740,44 @@ fn main() {
#[test]
fn associated_trait_function() {
- check_assist(
+ check_assist_by_label(
+ auto_import,
+ r"
+ mod test_mod {
+ pub trait TestTrait {
+ fn test_function();
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_function() {}
+ }
+ }
+
+ fn main() {
+ test_mod::TestStruct::test_function$0
+ }
+ ",
+ r"
+ use test_mod::TestTrait;
+
+ mod test_mod {
+ pub trait TestTrait {
+ fn test_function();
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_function() {}
+ }
+ }
+
+ fn main() {
+ test_mod::TestStruct::test_function
+ }
+ ",
+ "Import `test_mod::TestTrait`",
+ );
+
+ check_assist_by_label(
auto_import,
r"
mod test_mod {
@@ -773,6 +811,7 @@ fn main() {
test_mod::TestStruct::test_function
}
",
+ "Import `test_mod::TestTrait as _`",
);
}
@@ -810,7 +849,7 @@ fn main() {
#[test]
fn associated_trait_const() {
- check_assist(
+ check_assist_by_label(
auto_import,
r"
mod test_mod {
@@ -844,6 +883,44 @@ fn main() {
test_mod::TestStruct::TEST_CONST
}
",
+ "Import `test_mod::TestTrait as _`",
+ );
+
+ check_assist_by_label(
+ auto_import,
+ r"
+ mod test_mod {
+ pub trait TestTrait {
+ const TEST_CONST: u8;
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ const TEST_CONST: u8 = 42;
+ }
+ }
+
+ fn main() {
+ test_mod::TestStruct::TEST_CONST$0
+ }
+ ",
+ r"
+ use test_mod::TestTrait;
+
+ mod test_mod {
+ pub trait TestTrait {
+ const TEST_CONST: u8;
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ const TEST_CONST: u8 = 42;
+ }
+ }
+
+ fn main() {
+ test_mod::TestStruct::TEST_CONST
+ }
+ ",
+ "Import `test_mod::TestTrait`",
);
}
@@ -881,7 +958,7 @@ fn main() {
#[test]
fn trait_method() {
- check_assist(
+ check_assist_by_label(
auto_import,
r"
mod test_mod {
@@ -917,12 +994,52 @@ fn main() {
test_struct.test_method()
}
",
+ "Import `test_mod::TestTrait as _`",
+ );
+
+ check_assist_by_label(
+ auto_import,
+ r"
+ mod test_mod {
+ pub trait TestTrait {
+ fn test_method(&self);
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_method(&self) {}
+ }
+ }
+
+ fn main() {
+ let test_struct = test_mod::TestStruct {};
+ test_struct.test_meth$0od()
+ }
+ ",
+ r"
+ use test_mod::TestTrait;
+
+ mod test_mod {
+ pub trait TestTrait {
+ fn test_method(&self);
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_method(&self) {}
+ }
+ }
+
+ fn main() {
+ let test_struct = test_mod::TestStruct {};
+ test_struct.test_method()
+ }
+ ",
+ "Import `test_mod::TestTrait`",
);
}
#[test]
fn trait_method_cross_crate() {
- check_assist(
+ check_assist_by_label(
auto_import,
r"
//- /main.rs crate:main deps:dep
@@ -949,12 +1066,43 @@ fn main() {
test_struct.test_method()
}
",
+ "Import `dep::test_mod::TestTrait as _`",
+ );
+
+ check_assist_by_label(
+ auto_import,
+ r"
+ //- /main.rs crate:main deps:dep
+ fn main() {
+ let test_struct = dep::test_mod::TestStruct {};
+ test_struct.test_meth$0od()
+ }
+ //- /dep.rs crate:dep
+ pub mod test_mod {
+ pub trait TestTrait {
+ fn test_method(&self);
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_method(&self) {}
+ }
+ }
+ ",
+ r"
+ use dep::test_mod::TestTrait;
+
+ fn main() {
+ let test_struct = dep::test_mod::TestStruct {};
+ test_struct.test_method()
+ }
+ ",
+ "Import `dep::test_mod::TestTrait`",
);
}
#[test]
fn assoc_fn_cross_crate() {
- check_assist(
+ check_assist_by_label(
auto_import,
r"
//- /main.rs crate:main deps:dep
@@ -979,12 +1127,41 @@ fn main() {
dep::test_mod::TestStruct::test_function
}
",
+ "Import `dep::test_mod::TestTrait as _`",
+ );
+
+ check_assist_by_label(
+ auto_import,
+ r"
+ //- /main.rs crate:main deps:dep
+ fn main() {
+ dep::test_mod::TestStruct::test_func$0tion
+ }
+ //- /dep.rs crate:dep
+ pub mod test_mod {
+ pub trait TestTrait {
+ fn test_function();
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ fn test_function() {}
+ }
+ }
+ ",
+ r"
+ use dep::test_mod::TestTrait;
+
+ fn main() {
+ dep::test_mod::TestStruct::test_function
+ }
+ ",
+ "Import `dep::test_mod::TestTrait`",
);
}
#[test]
fn assoc_const_cross_crate() {
- check_assist(
+ check_assist_by_label(
auto_import,
r"
//- /main.rs crate:main deps:dep
@@ -1009,6 +1186,35 @@ fn main() {
dep::test_mod::TestStruct::CONST
}
",
+ "Import `dep::test_mod::TestTrait as _`",
+ );
+
+ check_assist_by_label(
+ auto_import,
+ r"
+ //- /main.rs crate:main deps:dep
+ fn main() {
+ dep::test_mod::TestStruct::CONST$0
+ }
+ //- /dep.rs crate:dep
+ pub mod test_mod {
+ pub trait TestTrait {
+ const CONST: bool;
+ }
+ pub struct TestStruct {}
+ impl TestTrait for TestStruct {
+ const CONST: bool = true;
+ }
+ }
+ ",
+ r"
+ use dep::test_mod::TestTrait;
+
+ fn main() {
+ dep::test_mod::TestStruct::CONST
+ }
+ ",
+ "Import `dep::test_mod::TestTrait`",
);
}