Unnamed repository; edit this file 'description' to name the repository.
chore: add test case for assoc func fix in `unresolved_method` diagnostic
Young-Flash 2024-01-02
parent 69410bb · commit 481fab1
-rw-r--r--crates/ide-diagnostics/src/handlers/unresolved_method.rs79
1 files changed, 79 insertions, 0 deletions
diff --git a/crates/ide-diagnostics/src/handlers/unresolved_method.rs b/crates/ide-diagnostics/src/handlers/unresolved_method.rs
index 4adb7000dd..6fd89b33a1 100644
--- a/crates/ide-diagnostics/src/handlers/unresolved_method.rs
+++ b/crates/ide-diagnostics/src/handlers/unresolved_method.rs
@@ -203,6 +203,85 @@ mod tests {
use crate::tests::{check_diagnostics, check_fix};
#[test]
+ fn test_assoc_func_fix() {
+ check_fix(
+ r#"
+struct A {}
+
+impl A {
+ fn hello() {}
+}
+fn main() {
+ let a = A{};
+ a.hello$0();
+}
+"#,
+ r#"
+struct A {}
+
+impl A {
+ fn hello() {}
+}
+fn main() {
+ let a = A{};
+ A::hello();
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn test_assoc_func_diagnostic() {
+ check_diagnostics(
+ r#"
+struct A {}
+impl A {
+ fn hello() {}
+}
+fn main() {
+ let a = A{};
+ a.hello();
+ // ^^^^^^^^^ 💡 error: no method `hello` on type `A`, but an associated function with a similar name exists
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn test_assoc_func_fix_with_generic() {
+ check_fix(
+ r#"
+struct A<T, U> {
+ a: T,
+ b: U
+}
+
+impl<T, U> A<T, U> {
+ fn foo() {}
+}
+fn main() {
+ let a = A {a: 0, b: ""};
+ a.foo()$0;
+}
+"#,
+ r#"
+struct A<T, U> {
+ a: T,
+ b: U
+}
+
+impl<T, U> A<T, U> {
+ fn foo() {}
+}
+fn main() {
+ let a = A {a: 0, b: ""};
+ A::<i32, &str>::foo();
+}
+"#,
+ );
+ }
+
+ #[test]
fn smoke_test() {
check_diagnostics(
r#"