Skip to main content

rustc_interface/
proc_macro_decls.rs

1use rustc_hir::attrs::AttributeKind;
2use rustc_hir::def_id::LocalDefId;
3use rustc_hir::find_attr;
4use rustc_middle::query::Providers;
5use rustc_middle::ty::TyCtxt;
6
7fn proc_macro_decls_static(tcx: TyCtxt<'_>, (): ()) -> Option<LocalDefId> {
8    let mut decls = None;
9
10    for id in tcx.hir_free_items() {
11        if {
    {
            'done:
                {
                for i in tcx.hir_attrs(id.hir_id()) {
                    let i: &rustc_hir::Attribute = i;
                    match i {
                        rustc_hir::Attribute::Parsed(AttributeKind::RustcProcMacroDecls)
                            => {
                            break 'done Some(());
                        }
                        _ => {}
                    }
                }
                None
            }
        }.is_some()
}find_attr!(tcx.hir_attrs(id.hir_id()), AttributeKind::RustcProcMacroDecls) {
12            decls = Some(id.owner_id.def_id);
13        }
14    }
15
16    decls
17}
18
19pub(crate) fn provide(providers: &mut Providers) {
20    *providers = Providers { proc_macro_decls_static, ..*providers };
21}