Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/ir_print.rs')
-rw-r--r--crates/hir-ty/src/next_solver/ir_print.rs44
1 files changed, 28 insertions, 16 deletions
diff --git a/crates/hir-ty/src/next_solver/ir_print.rs b/crates/hir-ty/src/next_solver/ir_print.rs
index 998aab5a3f..e0732b3473 100644
--- a/crates/hir-ty/src/next_solver/ir_print.rs
+++ b/crates/hir-ty/src/next_solver/ir_print.rs
@@ -1,7 +1,6 @@
//! Things related to IR printing in the next-trait-solver.
-use std::any::type_name_of_val;
-
+use hir_def::signatures::{TraitSignature, TypeAliasSignature};
use rustc_type_ir::{self as ty, ir_print::IrPrint};
use super::SolverDefId;
@@ -16,7 +15,7 @@ impl<'db> IrPrint<ty::AliasTy<Self>> for DbInterner<'db> {
crate::with_attached_db(|db| match t.def_id {
SolverDefId::TypeAliasId(id) => fmt.write_str(&format!(
"AliasTy({:?}[{:?}])",
- db.type_alias_signature(id).name.as_str(),
+ TypeAliasSignature::of(db, id).name.as_str(),
t.args
)),
SolverDefId::InternedOpaqueTyId(id) => {
@@ -36,7 +35,7 @@ impl<'db> IrPrint<ty::AliasTerm<Self>> for DbInterner<'db> {
crate::with_attached_db(|db| match t.def_id {
SolverDefId::TypeAliasId(id) => fmt.write_str(&format!(
"AliasTerm({:?}[{:?}])",
- db.type_alias_signature(id).name.as_str(),
+ TypeAliasSignature::of(db, id).name.as_str(),
t.args
)),
SolverDefId::InternedOpaqueTyId(id) => {
@@ -60,13 +59,13 @@ impl<'db> IrPrint<ty::TraitRef<Self>> for DbInterner<'db> {
fmt.write_str(&format!(
"{:?}: {}",
self_ty,
- db.trait_signature(trait_).name.as_str()
+ TraitSignature::of(db, trait_).name.as_str()
))
} else {
fmt.write_str(&format!(
"{:?}: {}<{:?}>",
self_ty,
- db.trait_signature(trait_).name.as_str(),
+ TraitSignature::of(db, trait_).name.as_str(),
trait_args
))
}
@@ -82,7 +81,10 @@ impl<'db> IrPrint<ty::TraitPredicate<Self>> for DbInterner<'db> {
t: &ty::TraitPredicate<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ match t.polarity {
+ ty::PredicatePolarity::Positive => write!(fmt, "{:?}", t.trait_ref),
+ ty::PredicatePolarity::Negative => write!(fmt, "!{:?}", t.trait_ref),
+ }
}
}
impl<'db> IrPrint<rustc_type_ir::HostEffectPredicate<Self>> for DbInterner<'db> {
@@ -97,7 +99,11 @@ impl<'db> IrPrint<rustc_type_ir::HostEffectPredicate<Self>> for DbInterner<'db>
t: &rustc_type_ir::HostEffectPredicate<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ let prefix = match t.constness {
+ ty::BoundConstness::Const => "const",
+ ty::BoundConstness::Maybe => "[const]",
+ };
+ write!(fmt, "{prefix} {:?}", t.trait_ref)
}
}
impl<'db> IrPrint<ty::ExistentialTraitRef<Self>> for DbInterner<'db> {
@@ -116,7 +122,7 @@ impl<'db> IrPrint<ty::ExistentialTraitRef<Self>> for DbInterner<'db> {
let trait_ = t.def_id.0;
fmt.write_str(&format!(
"ExistentialTraitRef({:?}[{:?}])",
- db.trait_signature(trait_).name.as_str(),
+ TraitSignature::of(db, trait_).name.as_str(),
t.args
))
})
@@ -141,7 +147,7 @@ impl<'db> IrPrint<ty::ExistentialProjection<Self>> for DbInterner<'db> {
};
fmt.write_str(&format!(
"ExistentialProjection(({:?}[{:?}]) -> {:?})",
- db.type_alias_signature(id).name.as_str(),
+ TypeAliasSignature::of(db, id).name.as_str(),
t.args,
t.term
))
@@ -167,7 +173,7 @@ impl<'db> IrPrint<ty::ProjectionPredicate<Self>> for DbInterner<'db> {
};
fmt.write_str(&format!(
"ProjectionPredicate(({:?}[{:?}]) -> {:?})",
- db.type_alias_signature(id).name.as_str(),
+ TypeAliasSignature::of(db, id).name.as_str(),
t.projection_term.args,
t.term
))
@@ -183,7 +189,7 @@ impl<'db> IrPrint<ty::NormalizesTo<Self>> for DbInterner<'db> {
t: &ty::NormalizesTo<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ write!(fmt, "NormalizesTo({} -> {:?})", t.alias, t.term)
}
}
impl<'db> IrPrint<ty::SubtypePredicate<Self>> for DbInterner<'db> {
@@ -198,7 +204,7 @@ impl<'db> IrPrint<ty::SubtypePredicate<Self>> for DbInterner<'db> {
t: &ty::SubtypePredicate<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ write!(fmt, "{:?} <: {:?}", t.a, t.b)
}
}
impl<'db> IrPrint<ty::CoercePredicate<Self>> for DbInterner<'db> {
@@ -210,7 +216,7 @@ impl<'db> IrPrint<ty::CoercePredicate<Self>> for DbInterner<'db> {
t: &ty::CoercePredicate<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ write!(fmt, "CoercePredicate({:?} -> {:?})", t.a, t.b)
}
}
impl<'db> IrPrint<ty::FnSig<Self>> for DbInterner<'db> {
@@ -219,7 +225,9 @@ impl<'db> IrPrint<ty::FnSig<Self>> for DbInterner<'db> {
}
fn print_debug(t: &ty::FnSig<Self>, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ let tys = t.inputs_and_output.as_slice();
+ let (output, inputs) = tys.split_last().unwrap();
+ write!(fmt, "fn({:?}) -> {:?}", inputs, output)
}
}
@@ -235,6 +243,10 @@ impl<'db> IrPrint<rustc_type_ir::PatternKind<DbInterner<'db>>> for DbInterner<'d
t: &rustc_type_ir::PatternKind<DbInterner<'db>>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- fmt.write_str(&format!("TODO: {:?}", type_name_of_val(t)))
+ match t {
+ ty::PatternKind::Range { start, end } => write!(fmt, "{:?}..={:?}", start, end),
+ ty::PatternKind::Or(list) => write!(fmt, "or({:?})", list),
+ ty::PatternKind::NotNull => fmt.write_str("!null"),
+ }
}
}