mirror of
https://github.com/Drop-OSS/interactive-clap.git
synced 2026-07-19 20:03:34 -04:00
added attr skip_default_from_cli_arg
This commit is contained in:
+2
-2
@@ -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
|
||||
+6
-8
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user