use std::any::Any;
use crate::{config::Config, Result, Run};
#[cfg(feature = "subcommand-build")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-build")))]
mod build;
#[cfg(feature = "subcommand-build")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-build")))]
pub use self::build::Build;
#[cfg(feature = "subcommand-clippy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-clippy")))]
mod clippy;
#[cfg(feature = "subcommand-clippy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-clippy")))]
pub use self::clippy::Clippy;
#[cfg(feature = "subcommand-dist-archive")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-archive")))]
mod dist_archive;
#[cfg(feature = "subcommand-dist-archive")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-archive")))]
pub use self::dist_archive::DistArchive;
#[cfg(subcommand_dist_build)]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-*")))]
mod dist_build;
#[cfg(subcommand_dist_build)]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-*")))]
pub use self::dist_build::DistBuild;
#[cfg(feature = "subcommand-dist-build-bin")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-bin")))]
mod dist_build_bin;
#[cfg(feature = "subcommand-dist-build-bin")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-bin")))]
pub use self::dist_build_bin::DistBuildBin;
#[cfg(feature = "subcommand-dist-build-completion")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-completion")))]
mod dist_build_completion;
#[cfg(feature = "subcommand-dist-build-completion")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-completion")))]
pub use self::dist_build_completion::DistBuildCompletion;
#[cfg(feature = "subcommand-dist-build-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-doc")))]
mod dist_build_doc;
#[cfg(feature = "subcommand-dist-build-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-doc")))]
pub use self::dist_build_doc::DistBuildDoc;
#[cfg(feature = "subcommand-dist-build-license")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-license")))]
mod dist_build_license;
#[cfg(feature = "subcommand-dist-build-license")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-license")))]
pub use self::dist_build_license::DistBuildLicense;
#[cfg(feature = "subcommand-dist-build-man")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-man")))]
mod dist_build_man;
#[cfg(feature = "subcommand-dist-build-man")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-man")))]
pub use self::dist_build_man::DistBuildMan;
#[cfg(feature = "subcommand-dist-build-readme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-readme")))]
mod dist_build_readme;
#[cfg(feature = "subcommand-dist-build-readme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-readme")))]
pub use self::dist_build_readme::DistBuildReadme;
#[cfg(feature = "subcommand-dist-clean")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-clean")))]
mod dist_clean;
#[cfg(feature = "subcommand-dist-clean")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-clean")))]
pub use self::dist_clean::DistClean;
#[cfg(feature = "subcommand-dist")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist")))]
mod dist;
#[cfg(feature = "subcommand-dist")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist")))]
pub use self::dist::Dist;
#[cfg(feature = "subcommand-exec")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-exec")))]
mod exec;
#[cfg(feature = "subcommand-exec")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-exec")))]
pub use self::exec::Exec;
#[cfg(feature = "subcommand-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-doc")))]
mod doc;
#[cfg(feature = "subcommand-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-doc")))]
pub use self::doc::Doc;
#[cfg(feature = "subcommand-docsrs")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-docsrs")))]
mod docsrs;
#[cfg(feature = "subcommand-docsrs")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-docsrs")))]
pub use self::docsrs::Docsrs;
#[cfg(feature = "subcommand-fmt")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-fmt")))]
mod fmt;
#[cfg(feature = "subcommand-fmt")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-fmt")))]
pub use self::fmt::Fmt;
#[cfg(feature = "subcommand-lint")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-lint")))]
mod lint;
#[cfg(feature = "subcommand-lint")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-lint")))]
pub use self::lint::Lint;
#[cfg(feature = "subcommand-pre-release")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-pre-release")))]
mod pre_release;
#[cfg(feature = "subcommand-pre-release")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-pre-release")))]
pub use self::pre_release::PreRelease;
#[cfg(feature = "subcommand-sync-rdme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-sync-rdme")))]
mod sync_rdme;
#[cfg(feature = "subcommand-sync-rdme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-sync-rdme")))]
pub use self::sync_rdme::SyncRdme;
#[cfg(feature = "subcommand-test")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-test")))]
mod test;
#[cfg(feature = "subcommand-test")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-test")))]
pub use self::test::Test;
#[cfg(feature = "subcommand-tidy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-tidy")))]
mod tidy;
#[cfg(feature = "subcommand-tidy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-tidy")))]
pub use self::tidy::Tidy;
#[cfg(feature = "subcommand-udeps")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-udeps")))]
mod udeps;
#[cfg(feature = "subcommand-udeps")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-udeps")))]
pub use self::udeps::Udeps;
#[cfg_attr(doc, doc = include_str!("../doc/cargo-xtask.md"))]
#[derive(Debug, clap::Subcommand)]
#[clap(bin_name = "cargo xtask", about = "Rust project automation command", long_about = None)]
#[non_exhaustive]
pub enum Subcommand {
#[cfg(feature = "subcommand-build")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-build")))]
Build(Build),
#[cfg(feature = "subcommand-clippy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-clippy")))]
Clippy(Clippy),
#[cfg(feature = "subcommand-dist")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist")))]
Dist(Dist),
#[cfg(feature = "subcommand-dist-archive")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-archive")))]
DistArchive(DistArchive),
#[cfg(subcommand_dist_build)]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-*")))]
DistBuild(DistBuild),
#[cfg(feature = "subcommand-dist-build-bin")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-bin")))]
DistBuildBin(DistBuildBin),
#[cfg(feature = "subcommand-dist-build-completion")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-completion")))]
DistBuildCompletion(DistBuildCompletion),
#[cfg(feature = "subcommand-dist-build-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-doc")))]
DistBuildDoc(DistBuildDoc),
#[cfg(feature = "subcommand-dist-build-license")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-license")))]
DistBuildLicense(DistBuildLicense),
#[cfg(feature = "subcommand-dist-build-man")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-man")))]
DistBuildMan(DistBuildMan),
#[cfg(feature = "subcommand-dist-build-readme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-build-readme")))]
DistBuildReadme(DistBuildReadme),
#[cfg(feature = "subcommand-dist-clean")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-dist-clean")))]
DistClean(DistClean),
#[cfg(feature = "subcommand-doc")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-doc")))]
Doc(Doc),
#[cfg(feature = "subcommand-docsrs")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-docsrs")))]
Docsrs(Docsrs),
#[cfg(feature = "subcommand-exec")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-exec")))]
Exec(Exec),
#[cfg(feature = "subcommand-fmt")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-fmt")))]
Fmt(Fmt),
#[cfg(feature = "subcommand-lint")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-lint")))]
Lint(Lint),
#[cfg(feature = "subcommand-pre-release")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-pre-release")))]
PreRelease(PreRelease),
#[cfg(feature = "subcommand-sync-rdme")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-syncrdme")))]
SyncRdme(sync_rdme::SyncRdme),
#[cfg(feature = "subcommand-test")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-test")))]
Test(Test),
#[cfg(feature = "subcommand-tidy")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-tidy")))]
Tidy(Tidy),
#[cfg(feature = "subcommand-udeps")]
#[cfg_attr(docsrs, doc(cfg(feature = "subcommand-udeps")))]
Udeps(Udeps),
}
impl Run for Subcommand {
fn run(&self, config: &Config) -> Result<()> {
self.run(config)
}
fn into_any(self: Box<Self>) -> Box<dyn Any> {
self
}
fn as_any(&self) -> &dyn Any {
self
}
fn as_any_mut(&mut self) -> &mut dyn Any {
self
}
}
impl Subcommand {
pub fn selected(&self) -> &dyn Run {
match self {
#[cfg(feature = "subcommand-build")]
Self::Build(args) => args,
#[cfg(feature = "subcommand-clippy")]
Self::Clippy(args) => args,
#[cfg(feature = "subcommand-dist")]
Self::Dist(args) => args,
#[cfg(feature = "subcommand-dist-archive")]
Self::DistArchive(args) => args,
#[cfg(subcommand_dist_build)]
Self::DistBuild(args) => args,
#[cfg(feature = "subcommand-dist-build-bin")]
Self::DistBuildBin(args) => args,
#[cfg(feature = "subcommand-dist-build-completion")]
Self::DistBuildCompletion(args) => args,
#[cfg(feature = "subcommand-dist-build-doc")]
Self::DistBuildDoc(args) => args,
#[cfg(feature = "subcommand-dist-build-license")]
Self::DistBuildLicense(args) => args,
#[cfg(feature = "subcommand-dist-build-man")]
Self::DistBuildMan(args) => args,
#[cfg(feature = "subcommand-dist-build-readme")]
Self::DistBuildReadme(args) => args,
#[cfg(feature = "subcommand-dist-clean")]
Self::DistClean(args) => args,
#[cfg(feature = "subcommand-doc")]
Self::Doc(args) => args,
#[cfg(feature = "subcommand-docsrs")]
Self::Docsrs(args) => args,
#[cfg(feature = "subcommand-exec")]
Self::Exec(args) => args,
#[cfg(feature = "subcommand-fmt")]
Self::Fmt(args) => args,
#[cfg(feature = "subcommand-lint")]
Self::Lint(args) => args,
#[cfg(feature = "subcommand-pre-release")]
Self::PreRelease(args) => args,
#[cfg(feature = "subcommand-sync-rdme")]
Self::SyncRdme(args) => args,
#[cfg(feature = "subcommand-test")]
Self::Test(args) => args,
#[cfg(feature = "subcommand-tidy")]
Self::Tidy(args) => args,
#[cfg(feature = "subcommand-udeps")]
Self::Udeps(args) => args,
#[cfg(not(subcommand))]
_ => unreachable!("no commands defined: {self:?}"),
}
}
pub fn run(&self, config: &Config) -> Result<()> {
self.selected().run(config)
}
}