summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-analyzer/crates/hir-ty/src/lang_items.rs
blob: afc54e729f9c3972e2134692eafa748a2ec223dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//! Functions to detect special lang items

use hir_def::{AdtId, HasModule};
use hir_expand::name;

use crate::db::HirDatabase;

pub fn is_box(adt: AdtId, db: &dyn HirDatabase) -> bool {
    let owned_box = name![owned_box].to_smol_str();
    let krate = adt.module(db.upcast()).krate();
    let box_adt = db.lang_item(krate, owned_box).and_then(|it| it.as_struct()).map(AdtId::from);
    Some(adt) == box_adt
}

pub fn is_unsafe_cell(adt: AdtId, db: &dyn HirDatabase) -> bool {
    let owned_box = name![unsafe_cell].to_smol_str();
    let krate = adt.module(db.upcast()).krate();
    let box_adt = db.lang_item(krate, owned_box).and_then(|it| it.as_struct()).map(AdtId::from);
    Some(adt) == box_adt
}