Skip to main content

rapx/analysis/scan/
mod.rs

1mod statistic;
2mod visitor;
3use crate::analysis::{Analysis, scan::visitor::FnVisitor};
4use rustc_hir::def_id::LOCAL_CRATE;
5use rustc_middle::ty::TyCtxt;
6
7/// Scan Analysis - obtain basic information for crate
8pub 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}