//! A shadow of `tokei.usage.kdl` in usage's vocabulary, generated by
//! `cargo run -p xtask -- gen-shadow`.
//!
//! Do not edit: regenerate it. It exists to be compiled and parsed against, so
//! that the parser can be measured at a real CLI's scale rather than a toy one.
#![allow(dead_code, unused_imports)]

use usage_derive::{Args, Cli, Subcommands, ValueEnum};

#[derive(Cli)]
#[usage(
    bin = "tokei",
    name = "tokei",
    version = "14.0.0 compiled with serialization support: json, cbor, yaml",
    about = "Count your code, quickly.\nSupport this project on GitHub Sponsors: https://github.com/sponsors/XAMPPRocky",
    unknown_flags = "error",
    args_override_self = false
)]
pub struct Cli {
    /// Sets a strict column width of the output, only available for terminal output.
    #[usage(long = "columns", short = 'c', conflicts = "--output")]
    pub columns: ::std::option::Option<::std::string::String>,
    /// Ignore all files & directories matching the pattern.
    #[usage(long = "exclude", short = 'e', var, variadic)]
    pub exclude: ::std::vec::Vec<::std::string::String>,
    /// Will print out statistics on individual files.
    #[usage(long = "files", short = 'f')]
    pub files: bool,
    /// Gives statistics from a previous tokei run. Can be given a file path, or "stdin" to read from stdin.
    #[usage(long = "input", short = 'i')]
    pub input: ::std::option::Option<::std::string::String>,
    /// Count hidden files.
    #[usage(long = "hidden")]
    pub hidden: bool,
    /// Prints out supported languages and their extensions.
    #[usage(long = "languages", short = 'l', conflicts = "input")]
    pub languages: bool,
    /// Don't respect ignore files (.gitignore, .ignore, etc.). This implies --no-ignore-parent, --no-ignore-dot, and --no-ignore-vcs.
    #[usage(long = "no-ignore")]
    pub no_ignore: bool,
    /// Don't respect ignore files (.gitignore, .ignore, etc.) in parent directories.
    #[usage(long = "no-ignore-parent")]
    pub no_ignore_parent: bool,
    /// Don't respect .ignore and .tokeignore files, including those in parent directories.
    #[usage(long = "no-ignore-dot")]
    pub no_ignore_dot: bool,
    /// Don't respect VCS ignore files (.gitignore, .hgignore, etc.) including those in parent directories.
    #[usage(long = "no-ignore-vcs")]
    pub no_ignore_vcs: bool,
    /// Outputs Tokei in a specific format. Compile with additional features for more format support.
    #[usage(long = "output", short = 'o')]
    pub output: ::std::option::Option<::std::string::String>,
    /// prints the (language, path, lines, blanks, code, comments) records as simple lines or as Json for batch processing
    #[usage(long = "streaming", value_enum)]
    pub streaming: ::std::option::Option<StreamingValue>,
    /// Sort languages based on column
    #[usage(long = "sort", short = 's', conflicts = "--rsort", value_enum)]
    pub sort: ::std::option::Option<SortValue>,
    /// Reverse sort languages based on column
    #[usage(long = "rsort", short = 'r', conflicts = "--sort", value_enum)]
    pub rsort: ::std::option::Option<RsortValue>,
    /// Filters output by language type, separated by a comma. i.e. -t=Rust,Markdown
    #[usage(long = "types", short = 't', var, variadic)]
    pub types: ::std::vec::Vec<::std::string::String>,
    /// Do not print statistics about embedded languages.
    #[usage(long = "compact", short = 'C')]
    pub compact: bool,
    /// Format of printed numbers, i.e., plain (1234, default), commas (1,234), dots (1.234), or underscores (1_234). Cannot be used with --output.
    #[usage(
        long = "num-format",
        short = 'n',
        conflicts = "--output",
        choices("commas", "dots", "plain", "underscores")
    )]
    pub num_format: ::std::option::Option<::std::string::String>,
    #[usage(
        help = "Set log output level:\n                        1: to show unknown file extensions,\n                        2: reserved for future debugging,\n                        3: enable file level trace. Not recommended on multiple files",
        long = "verbose",
        short = 'v',
        count
    )]
    pub verbose: u8,
    /// The path(s) to the file or directory to be counted. (default current directory)
    #[usage(arg, name = "input", conflicts = "--languages", var_min = 1)]
    pub input_2: ::std::vec::Vec<::std::string::String>,
}

#[derive(ValueEnum)]
#[usage(ignore_case)]
pub enum StreamingValue {
    #[usage(name = "simple")]
    Simple,
    #[usage(name = "json")]
    Json,
}

#[derive(ValueEnum)]
#[usage(ignore_case)]
pub enum SortValue {
    #[usage(name = "files")]
    Files,
    #[usage(name = "lines")]
    Lines,
    #[usage(name = "blanks")]
    Blanks,
    #[usage(name = "code")]
    Code,
    #[usage(name = "comments")]
    Comments,
}

#[derive(ValueEnum)]
#[usage(ignore_case)]
pub enum RsortValue {
    #[usage(name = "files")]
    Files,
    #[usage(name = "lines")]
    Lines,
    #[usage(name = "blanks")]
    Blanks,
    #[usage(name = "code")]
    Code,
    #[usage(name = "comments")]
    Comments,
}
