Skip to content

Commit 0b05a81

Browse files
committed
Auto merge of #684 - detrumi:impl-trait-cleanup, r=nikomatsakis
Opaque type cleanup Just a small PR to fill in some obvious todo's, remove dead code and deduplicate some pattern matching.
2 parents d20b5d6 + 2f47906 commit 0b05a81

File tree

5 files changed

+15
-29
lines changed

5 files changed

+15
-29
lines changed

chalk-ir/src/lib.rs

-8
Original file line numberDiff line numberDiff line change
@@ -1622,14 +1622,6 @@ impl<I: Interner> AliasTy<I> {
16221622
Ty::new(interner, self)
16231623
}
16241624

1625-
/// Gets the type parameters of the `Self` type in this alias type.
1626-
pub fn self_type_parameter(&self, interner: &I) -> Ty<I> {
1627-
match self {
1628-
AliasTy::Projection(projection_ty) => projection_ty.self_type_parameter(interner),
1629-
_ => todo!(),
1630-
}
1631-
}
1632-
16331625
/// Compute type flags for aliases
16341626
fn compute_flags(&self, interner: &I) -> TypeFlags {
16351627
match self {

chalk-solve/src/clauses.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ pub fn program_clauses_that_could_match<I: Interner>(
592592

593593
let trait_datum = db.trait_datum(trait_id);
594594

595-
let self_ty = alias.self_type_parameter(interner);
595+
let self_ty = proj.self_type_parameter(interner);
596596
if let TyKind::InferenceVar(_, _) = self_ty.kind(interner) {
597597
panic!("Inference vars not allowed when getting program clauses");
598598
}

chalk-solve/src/display.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ fn display_self_where_clauses_as_bounds<'a, I: Interner>(
163163
)
164164
.fmt(f)
165165
}
166-
AliasTy::Opaque(_opaque) => todo!("opaque type AliasTy"),
166+
AliasTy::Opaque(opaque) => opaque.display(s).fmt(f),
167167
},
168168
WhereClause::LifetimeOutlives(lifetime) => lifetime.display(s).fmt(f),
169169
WhereClause::TypeOutlives(ty) => ty.display(s).fmt(f),

chalk-solve/src/display/bounds.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ impl<I: Interner> RenderAsRust<I> for AliasEq<I> {
148148
),
149149
)
150150
}
151-
AliasTy::Opaque(_) => todo!("opaque types"),
151+
AliasTy::Opaque(opaque) => write!(f, "{}", opaque.display(s)),
152152
}
153153
}
154154
}

chalk-solve/src/logging_db/id_collector.rs

+12-18
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ impl<'i, I: Interner, DB: RustIrDatabase<I>> IdCollector<'i, I, DB> {
102102
fn record(&mut self, id: impl Into<RecordedItemId<I>>) {
103103
self.found_identifiers.insert(id.into());
104104
}
105+
106+
fn visit_alias(&mut self, alias: &AliasTy<I>) {
107+
match alias {
108+
AliasTy::Projection(projection_ty) => {
109+
let assoc_ty_datum = self.db.associated_ty_data(projection_ty.associated_ty_id);
110+
self.record(assoc_ty_datum.trait_id)
111+
}
112+
AliasTy::Opaque(opaque_ty) => self.record(opaque_ty.opaque_ty_id),
113+
}
114+
}
105115
}
106116

107117
impl<'i, I: Interner, DB: RustIrDatabase<I>> Visitor<'i, I> for IdCollector<'i, I, DB>
@@ -126,15 +136,7 @@ where
126136
TyKind::Adt(adt, _) => self.record(*adt),
127137
TyKind::FnDef(fn_def, _) => self.record(*fn_def),
128138
TyKind::OpaqueType(opaque, _) => self.record(*opaque),
129-
TyKind::Alias(alias) => match alias {
130-
AliasTy::Projection(projection_ty) => {
131-
let assoc_ty_datum = self.db.associated_ty_data(projection_ty.associated_ty_id);
132-
self.record(assoc_ty_datum.trait_id)
133-
}
134-
AliasTy::Opaque(opaque_ty) => {
135-
self.record(opaque_ty.opaque_ty_id);
136-
}
137-
},
139+
TyKind::Alias(alias) => self.visit_alias(&alias),
138140
TyKind::BoundVar(..) => (),
139141
TyKind::Dyn(..) => (),
140142
TyKind::Function(..) => (),
@@ -152,15 +154,7 @@ where
152154
) -> ControlFlow<()> {
153155
match where_clause {
154156
WhereClause::Implemented(trait_ref) => self.record(trait_ref.trait_id),
155-
WhereClause::AliasEq(alias_eq) => match &alias_eq.alias {
156-
AliasTy::Projection(projection_ty) => {
157-
let assoc_ty_datum = self.db.associated_ty_data(projection_ty.associated_ty_id);
158-
self.record(assoc_ty_datum.trait_id)
159-
}
160-
AliasTy::Opaque(opaque_ty) => {
161-
self.record(opaque_ty.opaque_ty_id);
162-
}
163-
},
157+
WhereClause::AliasEq(alias_eq) => self.visit_alias(&alias_eq.alias),
164158
WhereClause::LifetimeOutlives(_lifetime_outlives) => (),
165159
WhereClause::TypeOutlives(_type_outlives) => (),
166160
}

0 commit comments

Comments
 (0)