diff options
| author | zhoufan <1247714429@qq.com> | 2021-12-14 15:34:57 +0800 |
|---|---|---|
| committer | zhoufan <1247714429@qq.com> | 2021-12-14 15:34:57 +0800 |
| commit | 7b952cb1aac99c621e14c5fb63c66fc67c8470fc (patch) | |
| tree | f374c403fe3916d2130949351c47e5ff2583220e | |
| parent | 791722b70ad08641a48f96faedffdda6d2880366 (diff) | |
| download | rust-7b952cb1aac99c621e14c5fb63c66fc67c8470fc.tar.gz rust-7b952cb1aac99c621e14c5fb63c66fc67c8470fc.zip | |
infer associated method in local scope
| -rw-r--r-- | crates/hir_ty/src/infer/path.rs | 2 | ||||
| -rw-r--r-- | crates/hir_ty/src/tests/method_resolution.rs | 31 |
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#" |
