Skip to content

Commit fab04fe

Browse files
committed
implement the rest of feature(more_qualified_paths)
this handles: ```rust let (<E>::ES { a } | <E>::ET(a)) = <E>::ES { a: 0 }; ```
1 parent da7c176 commit fab04fe

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

crates/hir-ty/src/infer.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,7 @@ impl<'db> InferenceContext<'db> {
15801580
Some(path) => path,
15811581
None => return (self.err_ty(), None),
15821582
};
1583+
15831584
let mut ctx = TyLoweringContext::new(
15841585
self.db,
15851586
&self.resolver,
@@ -1589,6 +1590,25 @@ impl<'db> InferenceContext<'db> {
15891590
self.generic_def,
15901591
LifetimeElisionKind::Infer,
15911592
);
1593+
1594+
if let Some(type_anchor) = path.type_anchor() {
1595+
let segments = path.segments();
1596+
if segments.len() != 1 {
1597+
return (self.err_ty(), None);
1598+
}
1599+
let ty = ctx.lower_ty(type_anchor);
1600+
if let Some((AdtId::EnumId(id), _)) = ty.as_adt() {
1601+
let enum_data = self.db.enum_variants(id);
1602+
if let Some(variant) = enum_data.variant(segments.first().unwrap().name) {
1603+
// FIXME: Report error if there are generics on the variant.
1604+
return (ty, Some(variant.into()));
1605+
}
1606+
} else {
1607+
// FIXME: Report an error.
1608+
return (self.err_ty(), None);
1609+
}
1610+
}
1611+
15921612
let mut path_ctx = ctx.at_path(path, node);
15931613
let (resolution, unresolved) = if value_ns {
15941614
let Some(res) = path_ctx.resolve_path_in_value_ns(HygieneId::ROOT) else {

0 commit comments

Comments
 (0)