Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/display.rs')
-rw-r--r--crates/hir-ty/src/display.rs40
1 files changed, 17 insertions, 23 deletions
diff --git a/crates/hir-ty/src/display.rs b/crates/hir-ty/src/display.rs
index 6767bd05b3..c76b8dc5f0 100644
--- a/crates/hir-ty/src/display.rs
+++ b/crates/hir-ty/src/display.rs
@@ -17,7 +17,7 @@ use hir_def::{
hir::generics::{TypeOrConstParamData, TypeParamProvenance, WherePredicate},
item_scope::ItemInNs,
item_tree::FieldsShape,
- lang_item::LangItem,
+ lang_item::LangItems,
nameres::DefMap,
signatures::VariantFields,
type_ref::{
@@ -47,7 +47,7 @@ use stdx::never;
use triomphe::Arc;
use crate::{
- CallableDefId, FnAbi, ImplTraitId, MemoryMap, TraitEnvironment, consteval,
+ CallableDefId, FnAbi, ImplTraitId, InferenceResult, MemoryMap, TraitEnvironment, consteval,
db::{HirDatabase, InternedClosure, InternedCoroutine},
generics::generics,
layout::Layout,
@@ -61,7 +61,7 @@ use crate::{
infer::{DbInternerInferExt, traits::ObligationCause},
},
primitive,
- utils::{self, detect_variant_from_bytes},
+ utils::{detect_variant_from_bytes, fn_traits},
};
pub trait HirWrite: fmt::Write {
@@ -309,8 +309,7 @@ pub trait HirDisplay<'db> {
allow_opaque: bool,
) -> Result<String, DisplaySourceCodeError> {
let mut result = String::new();
- let interner =
- DbInterner::new_with(db, Some(module_id.krate()), module_id.containing_block());
+ let interner = DbInterner::new_with(db, module_id.krate());
match self.hir_fmt(&mut HirFormatter {
db,
interner,
@@ -392,6 +391,11 @@ impl<'db> HirFormatter<'_, 'db> {
self.display_target.edition
}
+ #[inline]
+ pub fn lang_items(&self) -> &'db LangItems {
+ self.interner.lang_items()
+ }
+
pub fn write_joined<T: HirDisplay<'db>>(
&mut self,
iter: impl IntoIterator<Item = T>,
@@ -540,11 +544,7 @@ pub enum ClosureStyle {
impl<'db, T: HirDisplay<'db>> HirDisplayWrapper<'_, 'db, T> {
pub fn write_to<F: HirWrite>(&self, f: &mut F) -> Result<(), HirDisplayError> {
let krate = self.display_target.krate;
- let block = match self.display_kind {
- DisplayKind::SourceCode { target_module_id, .. } => target_module_id.containing_block(),
- DisplayKind::Diagnostics | DisplayKind::Test => None,
- };
- let interner = DbInterner::new_with(self.db, Some(krate), block);
+ let interner = DbInterner::new_with(self.db, krate);
self.t.hir_fmt(&mut HirFormatter {
db: self.db,
interner,
@@ -1102,7 +1102,7 @@ impl<'db> HirDisplay<'db> for Ty<'db> {
bounds.iter().any(|bound| match bound.skip_binder() {
ExistentialPredicate::Trait(trait_ref) => {
let trait_ = trait_ref.def_id.0;
- fn_traits(db, trait_).any(|it| it == trait_)
+ fn_traits(f.lang_items()).any(|it| it == trait_)
}
_ => false,
});
@@ -1146,7 +1146,7 @@ impl<'db> HirDisplay<'db> for Ty<'db> {
let contains_impl_fn = bounds().any(|bound| {
if let ClauseKind::Trait(trait_ref) = bound.kind().skip_binder() {
let trait_ = trait_ref.def_id().0;
- fn_traits(db, trait_).any(|it| it == trait_)
+ fn_traits(f.lang_items()).any(|it| it == trait_)
} else {
false
}
@@ -1394,7 +1394,7 @@ impl<'db> HirDisplay<'db> for Ty<'db> {
if let Some(sig) = sig {
let sig = sig.skip_binder();
let InternedClosure(def, _) = db.lookup_intern_closure(id);
- let infer = db.infer(def);
+ let infer = InferenceResult::for_body(db, def);
let (_, kind) = infer.closure_info(id);
match f.closure_style {
ClosureStyle::ImplFn => write!(f, "impl {kind:?}(")?,
@@ -1588,8 +1588,7 @@ impl<'db> HirDisplay<'db> for Ty<'db> {
..
}
| hir_def::hir::Expr::Async { .. } => {
- let future_trait =
- LangItem::Future.resolve_trait(db, owner.module(db).krate());
+ let future_trait = f.lang_items().Future;
let output = future_trait.and_then(|t| {
t.trait_items(db)
.associated_type_by_name(&Name::new_symbol_root(sym::Output))
@@ -1799,11 +1798,6 @@ impl<'db> HirDisplay<'db> for Term<'db> {
}
}
-fn fn_traits(db: &dyn DefDatabase, trait_: TraitId) -> impl Iterator<Item = TraitId> + '_ {
- let krate = trait_.lookup(db).container.krate();
- utils::fn_traits(db, krate)
-}
-
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum SizedByDefault {
NotSized,
@@ -1815,7 +1809,7 @@ impl SizedByDefault {
match self {
Self::NotSized => false,
Self::Sized { anchor } => {
- let sized_trait = LangItem::Sized.resolve_trait(db, anchor);
+ let sized_trait = hir_def::lang_item::lang_items(db, anchor).Sized;
Some(trait_) == sized_trait
}
}
@@ -1868,7 +1862,7 @@ fn write_bounds_like_dyn_trait<'db>(
}
}
if !is_fn_trait {
- is_fn_trait = fn_traits(f.db, trait_).any(|it| it == trait_);
+ is_fn_trait = fn_traits(f.lang_items()).any(|it| it == trait_);
}
if !is_fn_trait && angle_open {
write!(f, ">")?;
@@ -1966,7 +1960,7 @@ fn write_bounds_like_dyn_trait<'db>(
write!(f, ">")?;
}
if let SizedByDefault::Sized { anchor } = default_sized {
- let sized_trait = LangItem::Sized.resolve_trait(f.db, anchor);
+ let sized_trait = hir_def::lang_item::lang_items(f.db, anchor).Sized;
if !is_sized {
if !first {
write!(f, " + ")?;