added attr skip_default_from_cli_arg

This commit is contained in:
FroVolod
2022-02-19 21:04:44 +02:00
parent 5f2943af94
commit 6add96a2c4
5 changed files with 11 additions and 16 deletions
@@ -4,7 +4,7 @@ use proc_macro_error::abort_call_site;
use quote::quote;
use syn;
pub fn is_field_without_skip_default_from_cli(field: &syn::Field) -> bool {
pub fn is_field_without_skip_default_from_cli_arg(field: &syn::Field) -> bool {
if field.attrs.is_empty() {
return true;
}
@@ -16,7 +16,7 @@ pub fn is_field_without_skip_default_from_cli(field: &syn::Field) -> bool {
.flatten()
.filter(|attr_token| match attr_token {
proc_macro2::TokenTree::Group(group) => {
if group.stream().to_string().contains("skip_default_from_cli") {
if group.stream().to_string().contains("skip_default_from_cli_arg") {
true
} else {
false
@@ -7,9 +7,6 @@ use syn;
pub fn from_cli_arg(ast: &syn::DeriveInput, fields: &syn::Fields) -> Vec<proc_macro2::TokenStream> {
let interactive_clap_attrs_context =
super::interactive_clap_attrs_context::InteractiveClapAttrsContext::new(&ast);
if interactive_clap_attrs_context.is_skip_default_from_cli {
return vec![quote!()];
};
let fields_without_subcommand = fields
.iter()
@@ -20,10 +17,10 @@ pub fn from_cli_arg(ast: &syn::DeriveInput, fields: &syn::Fields) -> Vec<proc_ma
})
.collect::<Vec<_>>();
let fields_without_skip_default_from_cli = fields
let fields_without_skip_default_from_cli_arg = fields
.iter()
.filter(|field| {
super::fields_without_skip_default_from_cli::is_field_without_skip_default_from_cli(
super::fields_without_skip_default_from_cli_arg::is_field_without_skip_default_from_cli_arg(
field,
)
})
@@ -42,13 +39,14 @@ pub fn from_cli_arg(ast: &syn::DeriveInput, fields: &syn::Fields) -> Vec<proc_ma
.iter()
.map(|token_stream| token_stream.to_string())
.collect::<Vec<_>>();
let fields_without_skip_default_from_cli_to_string =
fields_without_skip_default_from_cli
let fields_without_skip_default_from_cli_arg_to_string =
fields_without_skip_default_from_cli_arg
.iter()
.map(|token_stream| token_stream.to_string())
.collect::<Vec<_>>();
if fields_without_subcommand_to_string.contains(&ident_field.to_string())
& fields_without_skip_default_from_cli_to_string.contains(&ident_field.to_string())
& fields_without_skip_default_from_cli_arg_to_string
.contains(&ident_field.to_string())
{
let fn_from_cli_arg =
syn::Ident::new(&format!("from_cli_{}", &ident_field), Span::call_site());
@@ -5,15 +5,12 @@ use proc_macro_error::abort_call_site;
use quote::{__private::ext::RepToTokensExt, quote};
use syn;
pub fn vec_input_arg(
pub fn vec_fn_input_arg(
ast: &syn::DeriveInput,
fields: &syn::Fields,
) -> Vec<proc_macro2::TokenStream> {
let interactive_clap_attrs_context =
super::interactive_clap_attrs_context::InteractiveClapAttrsContext::new(&ast);
if interactive_clap_attrs_context.is_skip_default_from_cli {
return vec![quote!()];
};
let vec_fn_input_arg = fields
.iter()
.filter(|field| super::fields_without_subcommand::is_field_without_subcommand(field))
@@ -1,6 +1,6 @@
pub mod choose_variant;
pub mod cli_field_type;
pub mod fields_without_skip_default_from_cli;
pub mod fields_without_skip_default_from_cli_arg;
pub mod fields_without_skip_default_input_arg;
pub mod fields_without_subcommand;
pub mod from_cli_for_enum;
@@ -116,7 +116,7 @@ pub fn impl_interactive_clap(ast: &syn::DeriveInput) -> TokenStream {
let fn_get_arg =
self::methods::get_arg_from_cli_for_struct::from_cli_arg(&ast, &fields);
let vec_fn_input_arg = self::methods::input_arg::vec_input_arg(&ast, &fields);
let vec_fn_input_arg = self::methods::input_arg::vec_fn_input_arg(&ast, &fields);
let context_scope_fields = fields
.iter()