mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Merge #11004
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:
commit
536ed7c451
3 changed files with 37 additions and 6 deletions
|
@ -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| {
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
}
|
||||
"#,
|
||||
|
|
|
@ -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
|
||||
```
|
||||
"#]],
|
||||
"#]],
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue