From 9efbcad25b9d60a4b63b08d6cabd53515c9466b5 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 06 Mar 2022 23:19:09 +0000 Subject: [PATCH] build: upgrade clap to v3.1 --- --- a/cmds/jrsonnet/Cargo.toml +++ b/cmds/jrsonnet/Cargo.toml @@ -18,11 +18,5 @@ mimallocator = { version = "0.1.3", optional = true } thiserror = "1.0" gcmodule = { git = "https://github.com/CertainLach/gcmodule", branch = "jrsonnet" } - -[dependencies.clap] -git = "https://github.com/clap-rs/clap" -rev = "f0c5ea5e1503de5c8e74d8c047a799cf51498e83" - -[dependencies.clap_generate] -git = "https://github.com/clap-rs/clap" -rev = "f0c5ea5e1503de5c8e74d8c047a799cf51498e83" +clap = { version = "3.1", features = ["derive"] } +clap_complete = { version = "3.1" } --- a/cmds/jrsonnet/src/main.rs +++ b/cmds/jrsonnet/src/main.rs @@ -1,4 +1,5 @@ -use clap::{AppSettings, Clap, IntoApp}; +use clap::{AppSettings, IntoApp, Parser}; +use clap_complete::Shell; use jrsonnet_cli::{ConfigureState, GcOpts, GeneralOpts, InputOpts, ManifestOpts, OutputOpts}; use jrsonnet_evaluator::{error::LocError, EvaluationState}; use std::{ @@ -6,51 +7,39 @@ io::Read, io::Write, path::PathBuf, - str::FromStr, }; #[cfg(feature = "mimalloc")] #[global_allocator] static GLOBAL: mimallocator::Mimalloc = mimallocator::Mimalloc; -#[derive(Clap)] -#[clap(help_heading = "DEBUG")] +#[derive(Parser)] +enum SubOpts { + /// Generate completions for specified shell + Generate { + /// Target shell name + shell: Shell, + }, +} + +#[derive(Parser)] +#[clap(next_help_heading = "DEBUG")] struct DebugOpts { /// Required OS stack size. /// This shouldn't be changed unless jrsonnet is failing with stack overflow error. #[clap(long, name = "size")] pub os_stack: Option, - /// Generate completions script - #[clap(long)] - generate: Option, } -enum GenerateTarget { - Bash, - Zsh, - Fish, - PowerShell, -} -impl FromStr for GenerateTarget { - type Err = &'static str; - - fn from_str(s: &str) -> Result { - match s { - "bash" => Ok(Self::Bash), - "zsh" => Ok(Self::Zsh), - "fish" => Ok(Self::Fish), - "powershell" => Ok(Self::PowerShell), - _ => Err("unknown target"), - } - } -} - -#[derive(Clap)] +#[derive(Parser)] #[clap( - global_setting = AppSettings::ColoredHelp, global_setting = AppSettings::DeriveDisplayOrder, + // args_conflicts_with_subcommands = true, )] struct Opts { + #[clap(subcommand)] + sub: Option, + #[clap(flatten)] input: InputOpts, #[clap(flatten)] @@ -68,20 +57,17 @@ fn main() { let opts: Opts = Opts::parse(); - if let Some(target) = opts.debug.generate { - use clap_generate::{generate, generators}; - use GenerateTarget::*; - let app = &mut Opts::into_app(); - let buf = &mut std::io::stdout(); - let bin = "jrsonnet"; - match target { - Bash => generate::(app, bin, buf), - Zsh => generate::(app, bin, buf), - Fish => generate::(app, bin, buf), - PowerShell => generate::(app, bin, buf), + if let Some(sub) = opts.sub { + match sub { + SubOpts::Generate { shell } => { + use clap_complete::generate; + let app = &mut Opts::command(); + let buf = &mut std::io::stdout(); + generate(shell, app, "jrsonnet", buf); + std::process::exit(0) + } } - std::process::exit(0); - }; + } let success = if let Some(size) = opts.debug.os_stack { std::thread::Builder::new() --- a/crates/jrsonnet-cli/Cargo.toml +++ b/crates/jrsonnet-cli/Cargo.toml @@ -14,6 +14,4 @@ jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.4.2" } gcmodule = { git = "https://github.com/CertainLach/gcmodule", branch = "jrsonnet" } -[dependencies.clap] -git = "https://github.com/clap-rs/clap" -rev = "f0c5ea5e1503de5c8e74d8c047a799cf51498e83" +clap = { version = "3.1", features = ["derive"] } --- a/crates/jrsonnet-cli/src/ext.rs +++ b/crates/jrsonnet-cli/src/ext.rs @@ -1,5 +1,5 @@ use crate::ConfigureState; -use clap::Clap; +use clap::Parser; use jrsonnet_evaluator::{error::Result, EvaluationState}; use std::{fs::read_to_string, str::FromStr}; @@ -53,8 +53,8 @@ } } -#[derive(Clap)] -#[clap(help_heading = "EXTERNAL VARIABLES")] +#[derive(Parser)] +#[clap(next_help_heading = "EXTERNAL VARIABLES")] pub struct ExtVarOpts { /// Add string external variable. /// External variables are globally available so it is preferred --- a/crates/jrsonnet-cli/src/lib.rs +++ b/crates/jrsonnet-cli/src/lib.rs @@ -8,7 +8,7 @@ pub use tla::*; pub use trace::*; -use clap::Clap; +use clap::Parser; use jrsonnet_evaluator::{error::Result, EvaluationState, FileImportResolver}; use std::{env, path::PathBuf}; @@ -16,24 +16,19 @@ fn configure(&self, state: &EvaluationState) -> Result<()>; } -#[derive(Clap)] -#[clap(help_heading = "INPUT")] +#[derive(Parser)] +#[clap(next_help_heading = "INPUT")] pub struct InputOpts { - #[clap( - long, - short = 'e', - about = "Treat input as code, evaluate them instead of reading file" - )] + /// Treat input as code, evaluate them instead of reading file + #[clap(long, short = 'e')] pub exec: bool, - #[clap( - about = "Path to the file to be compiled if `--evaluate` is unset, otherwise code itself" - )] + /// Path to the file to be compiled if `--evaluate` is unset, otherwise code itself pub input: String, } -#[derive(Clap)] -#[clap(help_heading = "OPTIONS")] +#[derive(Parser)] +#[clap(next_help_heading = "OPTIONS")] pub struct MiscOpts { /// Disable standard library. /// By default standard library will be available via global `std` variable. @@ -74,7 +69,7 @@ } /// General configuration of jsonnet -#[derive(Clap)] +#[derive(Parser)] #[clap(name = "jrsonnet", version, author)] pub struct GeneralOpts { #[clap(flatten)] @@ -100,8 +95,8 @@ } } -#[derive(Clap)] -#[clap(help_heading = "GARBAGE COLLECTION")] +#[derive(Parser)] +#[clap(next_help_heading = "GARBAGE COLLECTION")] pub struct GcOpts { /// Do not skip gc on exit #[clap(long)] --- a/crates/jrsonnet-cli/src/manifest.rs +++ b/crates/jrsonnet-cli/src/manifest.rs @@ -1,5 +1,5 @@ use crate::ConfigureState; -use clap::Clap; +use clap::Parser; use jrsonnet_evaluator::{error::Result, EvaluationState, ManifestFormat}; use std::{path::PathBuf, str::FromStr}; @@ -22,8 +22,8 @@ } } -#[derive(Clap)] -#[clap(help_heading = "MANIFESTIFICATION OUTPUT")] +#[derive(Parser)] +#[clap(next_help_heading = "MANIFESTIFICATION OUTPUT")] pub struct ManifestOpts { /// Output format, wraps resulting value to corresponding std.manifest call. /// If set to `string` then plain string value is expected to be returned, @@ -66,7 +66,7 @@ } } -#[derive(Clap)] +#[derive(Parser)] pub struct OutputOpts { /// Write to the output file rather than stdout #[clap(long, short = 'o')] --- a/crates/jrsonnet-cli/src/tla.rs +++ b/crates/jrsonnet-cli/src/tla.rs @@ -1,9 +1,9 @@ use crate::{ConfigureState, ExtFile, ExtStr}; -use clap::Clap; +use clap::Parser; use jrsonnet_evaluator::{error::Result, EvaluationState}; -#[derive(Clap)] -#[clap(help_heading = "TOP LEVEL ARGUMENTS")] +#[derive(Parser)] +#[clap(next_help_heading = "TOP LEVEL ARGUMENTS")] pub struct TLAOpts { /// Add top level string argument. /// Top level arguments will be passed to function before manifestification stage. --- a/crates/jrsonnet-cli/src/trace.rs +++ b/crates/jrsonnet-cli/src/trace.rs @@ -1,5 +1,5 @@ use crate::ConfigureState; -use clap::Clap; +use clap::Parser; use jrsonnet_evaluator::{ error::Result, trace::{CompactFormat, ExplainingFormat, PathResolver}, @@ -24,8 +24,8 @@ } } -#[derive(Clap)] -#[clap(help_heading = "STACK TRACE VISUAL")] +#[derive(Parser)] +#[clap(next_help_heading = "STACK TRACE VISUAL")] pub struct TraceOpts { /// Format of stack traces' display in console. /// `compact` format only shows `filename:line:column`s -- gitstuff