about summary refs log tree commit diff
diff options
context:
space:
mode:
authorzhoufan <1247714429@qq.com>2021-12-14 15:34:57 +0800
committerzhoufan <1247714429@qq.com>2021-12-14 15:34:57 +0800
commit7b952cb1aac99c621e14c5fb63c66fc67c8470fc (patch)
treef374c403fe3916d2130949351c47e5ff2583220e
parent791722b70ad08641a48f96faedffdda6d2880366 (diff)
downloadrust-7b952cb1aac99c621e14c5fb63c66fc67c8470fc.tar.gz
rust-7b952cb1aac99c621e14c5fb63c66fc67c8470fc.zip
infer associated method in local scope
-rw-r--r--crates/hir_ty/src/infer/path.rs2
-rw-r--r--crates/hir_ty/src/tests/method_resolution.rs31
2 files changed, 32 insertions, 1 deletions
diff --git a/crates/hir_ty/src/infer/path.rs b/crates/hir_ty/src/infer/path.rs
index a84501fa54d..06689e1d29f 100644
--- a/crates/hir_ty/src/infer/path.rs
+++ b/crates/hir_ty/src/infer/path.rs
@@ -227,7 +227,7 @@ impl<'a> InferenceContext<'a> {
             self.table.trait_env.clone(),
             krate,
             &traits_in_scope,
-            None,
+            self.resolver.module(),
             Some(name),
             method_resolution::LookupMode::Path,
             move |_ty, item| {
diff --git a/crates/hir_ty/src/tests/method_resolution.rs b/crates/hir_ty/src/tests/method_resolution.rs
index 731605ced1f..11bdfa85a9f 100644
--- a/crates/hir_ty/src/tests/method_resolution.rs
+++ b/crates/hir_ty/src/tests/method_resolution.rs
@@ -85,6 +85,37 @@ fn infer_associated_method_struct() {
 }
 
 #[test]
+fn infer_associated_method_struct_in_local_scope() {
+    check_infer(
+        r#"
+        fn mismatch() {
+            struct A;
+
+            impl A {
+                fn from(_: i32, _: i32) -> Self {
+                    A
+                }
+            }
+
+            let _a = A::from(1, 2);
+        }
+        "#,
+        expect![[r#"
+            14..146 '{     ... 2); }': ()
+            125..127 '_a': A
+            130..137 'A::from': fn from(i32, i32) -> A
+            130..143 'A::from(1, 2)': A
+            138..139 '1': i32
+            141..142 '2': i32
+            60..61 '_': i32
+            68..69 '_': i32
+            84..109 '{     ...     }': A
+            98..99 'A': A
+        "#]],
+    );
+}
+
+#[test]
 fn infer_associated_method_enum() {
     check_infer(
         r#"