From 1b6a04ca5504955c571d1c97504fb45ea0befee4 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Mon, 8 Jan 2024 01:21:28 +0400 Subject: Initial vendor packages Signed-off-by: Valentin Popov --- vendor/clap_derive/src/derives/into_app.rs | 117 +++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 vendor/clap_derive/src/derives/into_app.rs (limited to 'vendor/clap_derive/src/derives/into_app.rs') diff --git a/vendor/clap_derive/src/derives/into_app.rs b/vendor/clap_derive/src/derives/into_app.rs new file mode 100644 index 0000000..5abf4ea --- /dev/null +++ b/vendor/clap_derive/src/derives/into_app.rs @@ -0,0 +1,117 @@ +// Copyright 2018 Guillaume Pinot (@TeXitoi) , +// Kevin Knapp (@kbknapp) , and +// Ana Hobden (@hoverbear) +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. +// +// This work was derived from Structopt (https://github.com/TeXitoi/structopt) +// commit#ea76fa1b1b273e65e3b0b1046643715b49bec51f which is licensed under the +// MIT/Apache 2.0 license. + +use proc_macro2::{Span, TokenStream}; +use quote::quote; +use syn::{Generics, Ident}; + +use crate::item::Item; + +pub fn gen_for_struct( + item: &Item, + item_name: &Ident, + generics: &Generics, +) -> Result { + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); + + let name = item.cased_name(); + let app_var = Ident::new("__clap_app", Span::call_site()); + + let tokens = quote! { + #[allow( + dead_code, + unreachable_code, + unused_variables, + unused_braces, + unused_qualifications, + )] + #[allow( + clippy::style, + clippy::complexity, + clippy::pedantic, + clippy::restriction, + clippy::perf, + clippy::deprecated, + clippy::nursery, + clippy::cargo, + clippy::suspicious_else_formatting, + clippy::almost_swapped, + clippy::redundant_locals, + )] + #[automatically_derived] + impl #impl_generics clap::CommandFactory for #item_name #ty_generics #where_clause { + fn command<'b>() -> clap::Command { + let #app_var = clap::Command::new(#name); + ::augment_args(#app_var) + } + + fn command_for_update<'b>() -> clap::Command { + let #app_var = clap::Command::new(#name); + ::augment_args_for_update(#app_var) + } + } + }; + + Ok(tokens) +} + +pub fn gen_for_enum( + item: &Item, + item_name: &Ident, + generics: &Generics, +) -> Result { + let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); + + let name = item.cased_name(); + let app_var = Ident::new("__clap_app", Span::call_site()); + + Ok(quote! { + #[allow( + dead_code, + unreachable_code, + unused_variables, + unused_braces, + unused_qualifications, + )] + #[allow( + clippy::style, + clippy::complexity, + clippy::pedantic, + clippy::restriction, + clippy::perf, + clippy::deprecated, + clippy::nursery, + clippy::cargo, + clippy::suspicious_else_formatting, + clippy::almost_swapped, + clippy::redundant_locals, + )] + #[automatically_derived] + impl #impl_generics clap::CommandFactory for #item_name #ty_generics #where_clause { + fn command<'b>() -> clap::Command { + let #app_var = clap::Command::new(#name) + .subcommand_required(true) + .arg_required_else_help(true); + ::augment_subcommands(#app_var) + } + + fn command_for_update<'b>() -> clap::Command { + let #app_var = clap::Command::new(#name); + ::augment_subcommands_for_update(#app_var) + .subcommand_required(false) + .arg_required_else_help(false) + } + } + }) +} -- cgit v1.2.3