use crate::common::{ManifestTargetArgs, WorkspacePath};
use clap::Args;
#[derive(Args)]
pub struct LintArgs {
#[arg(long)]
all: bool,
#[command(flatten)]
pub workspace: WorkspacePath,
#[command(flatten)]
pub manifest: ManifestTargetArgs,
#[arg(long)]
fmt: bool,
#[arg(long)]
clippy: bool,
#[arg(long)]
strict: bool,
#[arg(long)]
dylint: bool,
}
impl LintArgs {
pub fn run(self) -> anyhow::Result<()> {
cargo_gears_core::lint::LintParams::from(self).run()
}
}
impl From<LintArgs> for cargo_gears_core::lint::LintParams {
fn from(args: LintArgs) -> Self {
Self {
all: args.all,
path: args.workspace.path,
manifest: args.manifest.into_selection(),
fmt: args.fmt,
clippy: args.clippy,
strict: args.strict,
dylint: args.dylint,
}
}
}
#[cfg(test)]
mod tests {
use super::LintArgs;
use clap::Parser;
#[derive(Parser)]
struct TestCli {
#[command(flatten)]
lint: LintArgs,
}
#[test]
fn parses_default_lint_args() {
let cli = TestCli::try_parse_from(["gears", "--app", "app1", "--env", "dev"])
.expect("lint args should parse");
assert!(!cli.lint.all);
assert!(!cli.lint.fmt);
assert!(!cli.lint.clippy);
assert!(!cli.lint.strict);
assert!(!cli.lint.dylint);
}
}