mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 14:13:58 +00:00
#11986 Aliases break resolution of qualified variants in patterns
This commit is contained in:
parent
198c075580
commit
7900d99e3e
2 changed files with 21 additions and 1 deletions
|
@ -735,7 +735,8 @@ impl<'a> InferenceContext<'a> {
|
|||
unresolved: Option<usize>,
|
||||
path: &Path,
|
||||
) -> (Ty, Option<VariantId>) {
|
||||
match unresolved {
|
||||
let remaining = unresolved.map(|x| path.segments().skip(x).len()).filter(|x| x > &0);
|
||||
match remaining {
|
||||
None => {
|
||||
let variant = ty.as_adt().and_then(|(adt_id, _)| match adt_id {
|
||||
AdtId::StructId(s) => Some(VariantId::StructId(s)),
|
||||
|
|
|
@ -1588,6 +1588,16 @@ fn infer_type_alias() {
|
|||
z.x;
|
||||
z.y;
|
||||
}
|
||||
mod m {
|
||||
pub enum Enum {
|
||||
Foo(u8),
|
||||
}
|
||||
pub type Alias = Enum;
|
||||
}
|
||||
fn f() {
|
||||
let e = m::Alias::Foo(0);
|
||||
let m::Alias::Foo(x) = &e;
|
||||
}
|
||||
"#,
|
||||
expect![[r#"
|
||||
115..116 'x': A<u32, i128>
|
||||
|
@ -1606,6 +1616,15 @@ fn infer_type_alias() {
|
|||
195..198 'z.x': u8
|
||||
204..205 'z': A<u8, i8>
|
||||
204..207 'z.y': i8
|
||||
298..362 '{ ... &e; }': ()
|
||||
308..309 'e': Enum
|
||||
312..325 'm::Alias::Foo': Foo(u8) -> Enum
|
||||
312..328 'm::Ali...Foo(0)': Enum
|
||||
326..327 '0': u8
|
||||
338..354 'm::Ali...Foo(x)': Enum
|
||||
352..353 'x': &u8
|
||||
357..359 '&e': &Enum
|
||||
358..359 'e': Enum
|
||||
"#]],
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue