1 use rustc::middle::cstore::ForeignModule;
4 use rustc_hir::itemlikevisit::ItemLikeVisitor;
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>) {}