11004: Fix: Infer associated method in local scope r=flodiebold a=XFFXFF

fixes #10936 

Co-authored-by: zhoufan <1247714429@qq.com>
This commit is contained in:
bors[bot] 2021-12-14 09:15:19 +00:00 committed by GitHub
commit 536ed7c451
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 6 deletions

View file

@ -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| {

View file

@ -84,6 +84,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(
@ -277,7 +308,7 @@ fn test() {
pub mod foo {
pub struct S;
impl S {
fn thing() -> i128 { 0 }
pub fn thing() -> i128 { 0 }
}
}
"#,

View file

@ -823,10 +823,10 @@ fn test_hover_infer_associated_method_exact() {
check(
r#"
mod wrapper {
struct Thing { x: u32 }
pub struct Thing { x: u32 }
impl Thing {
fn new() -> Thing { Thing { x: 0 } }
pub fn new() -> Thing { Thing { x: 0 } }
}
}
@ -840,9 +840,9 @@ fn main() { let foo_test = wrapper::Thing::new$0(); }
```
```rust
fn new() -> Thing
pub fn new() -> Thing
```
"#]],
"#]],
)
}