2 use rustc_hir
::itemlikevisit
::ItemLikeVisitor
;
3 use rustc_middle
::middle
::cstore
::ForeignModule
;
4 use rustc_middle
::ty
::TyCtxt
;
6 crate fn collect(tcx
: TyCtxt
<'_
>) -> Vec
<ForeignModule
> {
7 let mut collector
= Collector { tcx, modules: Vec::new() }
;
8 tcx
.hir().krate().visit_all_item_likes(&mut collector
);
12 struct Collector
<'tcx
> {
14 modules
: Vec
<ForeignModule
>,
17 impl ItemLikeVisitor
<'tcx
> for Collector
<'tcx
> {
18 fn visit_item(&mut self, it
: &'tcx hir
::Item
<'tcx
>) {
19 let fm
= match it
.kind
{
20 hir
::ItemKind
::ForeignMod(ref fm
) => fm
,
25 fm
.items
.iter().map(|it
| self.tcx
.hir().local_def_id(it
.hir_id
)).collect();
27 .push(ForeignModule { foreign_items, def_id: self.tcx.hir().local_def_id(it.hir_id) }
);
30 fn visit_trait_item(&mut self, _it
: &'tcx hir
::TraitItem
<'tcx
>) {}
31 fn visit_impl_item(&mut self, _it
: &'tcx hir
::ImplItem
<'tcx
>) {}