rapx/analysis/scan/
mod.rs1mod statistic;
2#[allow(unused)]
7mod visitor;
8use crate::analysis::{Analysis, scan::visitor::FnVisitor};
9use rustc_hir::def_id::LOCAL_CRATE;
10use rustc_middle::ty::TyCtxt;
11
12pub struct ScanAnalysis<'tcx> {
14 tcx: TyCtxt<'tcx>,
15}
16
17impl<'tcx> Analysis for ScanAnalysis<'tcx> {
18 fn name(&self) -> &'static str {
19 "Scan Analysis"
20 }
21
22 fn run(&mut self) {
23 let crate_name = self.tcx.crate_name(LOCAL_CRATE);
24 let crate_type = self.tcx.crate_types()[0];
25 rap_info!("======== crate info ========");
26 rap_info!("name: {}", crate_name.as_str());
27 rap_info!("type: {}", crate_type);
28 rap_info!("============================");
29 rap_info!("");
30 rap_info!("======== API info ========");
31 let mut fn_visitor = FnVisitor::new(self.tcx);
32 self.tcx.hir_visit_all_item_likes_in_crate(&mut fn_visitor);
33 let stats = fn_visitor.statistic();
34 stats.info().print_log();
35 rap_info!("============================");
36 }
37
38 fn reset(&mut self) {}
39}
40
41impl<'tcx> ScanAnalysis<'tcx> {
42 pub fn new(tcx: TyCtxt<'tcx>) -> Self {
43 ScanAnalysis { tcx }
44 }
45}