use clap::{Args, Subcommand, ValueEnum};
use std::path::PathBuf;
#[derive(Debug, Clone, Args)]
pub struct AdgArgs {
#[arg(long)]
pub include_private: bool,
#[arg(long)]
pub include_unsafe: bool,
#[arg(long)]
pub include_drop: bool,
#[arg(long, default_value_t = 10)]
pub max_iteration: usize,
#[arg(long, default_missing_value = "./api_graph.dot", value_name = "PATH")]
pub dump: Option<PathBuf>,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum AliasStrategyKind {
Mop,
Mfp,
}
#[derive(Debug, Clone, Subcommand)]
pub enum AnalysisKind {
Alias {
#[arg(short, long, default_value = "mop")]
strategy: AliasStrategyKind,
},
Adg(AdgArgs),
Upg,
UpgStd,
Callgraph,
Dataflow {
#[arg(short, long)]
debug: bool,
#[arg(short, long)]
draw: bool,
},
OwnedHeap,
Paths,
Pathcond,
Range {
#[arg(short, long)]
debug: bool,
},
Scan,
Ssa,
Mir,
DotMir,
}