rapx/analysis/scan/
mod.rs1mod statistic;
2mod visitor;
3use crate::analysis::{Analysis, scan::visitor::FnVisitor};
4use rustc_hir::def_id::LOCAL_CRATE;
5use rustc_middle::ty::TyCtxt;
6
7pub struct ScanAnalysis<'tcx> {
9 tcx: TyCtxt<'tcx>,
10}
11
12impl<'tcx> Analysis for ScanAnalysis<'tcx> {
13 fn run(&mut self) {
14 let crate_name = self.tcx.crate_name(LOCAL_CRATE);
15 let crate_type = self.tcx.crate_types()[0];
16 rap_info!("======== crate info ========");
17 rap_info!("name: {}", crate_name.as_str());
18 rap_info!("type: {}", crate_type);
19 rap_info!("============================");
20 rap_info!("");
21 rap_info!("======== API info ========");
22 let mut fn_visitor = FnVisitor::new(self.tcx);
23 self.tcx.hir_visit_all_item_likes_in_crate(&mut fn_visitor);
24 let stats = fn_visitor.statistic();
25 stats.info().print_log();
26 rap_info!("============================");
27 }
28
29}
30
31impl<'tcx> ScanAnalysis<'tcx> {
32 pub fn new(tcx: TyCtxt<'tcx>) -> Self {
33 ScanAnalysis { tcx }
34 }
35}