mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
Use lang-item instead of db lookup for FnTrait
kind
This commit is contained in:
parent
46cdce1b53
commit
a4021f6ed5
2 changed files with 10 additions and 9 deletions
|
@ -177,15 +177,7 @@ impl InferenceContext<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fn_trait_kind_from_trait_id(&self, trait_id: hir_def::TraitId) -> Option<FnTrait> {
|
fn fn_trait_kind_from_trait_id(&self, trait_id: hir_def::TraitId) -> Option<FnTrait> {
|
||||||
utils::fn_traits(self.db.upcast(), self.owner.module(self.db.upcast()).krate())
|
FnTrait::from_lang_item(self.db.lang_attr(trait_id.into())?)
|
||||||
.enumerate()
|
|
||||||
.find_map(|(i, t)| (t == trait_id).then_some(i))
|
|
||||||
.map(|i| match i {
|
|
||||||
0 => FnTrait::Fn,
|
|
||||||
1 => FnTrait::FnMut,
|
|
||||||
2 => FnTrait::FnOnce,
|
|
||||||
_ => unreachable!(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,15 @@ impl FnTrait {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub const fn from_lang_item(lang_item: LangItem) -> Option<Self> {
|
||||||
|
match lang_item {
|
||||||
|
LangItem::FnOnce => Some(FnTrait::FnOnce),
|
||||||
|
LangItem::FnMut => Some(FnTrait::FnMut),
|
||||||
|
LangItem::Fn => Some(FnTrait::Fn),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub const fn to_chalk_ir(self) -> rust_ir::ClosureKind {
|
pub const fn to_chalk_ir(self) -> rust_ir::ClosureKind {
|
||||||
match self {
|
match self {
|
||||||
FnTrait::FnOnce => rust_ir::ClosureKind::FnOnce,
|
FnTrait::FnOnce => rust_ir::ClosureKind::FnOnce,
|
||||||
|
|
Loading…
Reference in a new issue