Skip to content

Commit a167d86

Browse files
Fixes #20 Adds support for short-version of boolean flags
Users can now use a more concise syntax for specifying a boolean parameter value within an attribute. A parameter 'foo' can have a 'true' value specified with the following syntax #[my_attr(foo)]
1 parent bd1a868 commit a167d86

File tree

3 files changed

+19
-8
lines changed
  • attribution-examples/exhaustive-attr
  • attribution/src

3 files changed

+19
-8
lines changed

attribution-examples/exhaustive-attr/exhaustive-attr-macros/src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use syn::Stmt;
1515
#[derive(AttrArgs)]
1616
struct AttributeArgs {
1717
flag: bool,
18+
simple_flag: bool,
1819
string: String,
1920
integer: i64,
2021
float: f64,
@@ -37,6 +38,10 @@ fn make_print_lines(attr: AttributeArgs) -> impl IntoIterator<Item = Stmt> {
3738
value: attr.flag,
3839
span: proc_macro2::Span::call_site(),
3940
};
41+
let simple_flag_val = LitBool {
42+
value: attr.simple_flag,
43+
span: proc_macro2::Span::call_site(),
44+
};
4045
let string_val = LitStr::new(&attr.string, Span::call_site());
4146
let integer_val = LitInt::new(&attr.integer.to_string(), Span::call_site());
4247
let float_val = LitFloat::new(&attr.float.to_string(), Span::call_site());
@@ -50,6 +55,9 @@ fn make_print_lines(attr: AttributeArgs) -> impl IntoIterator<Item = Stmt> {
5055
parse_quote! {
5156
println!("flag = {}", #flag_val);
5257
},
58+
parse_quote! {
59+
println!("simple_flag = {}", #simple_flag_val);
60+
},
5361
parse_quote! {
5462
println!("string = {}", #string_val);
5563
},
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use exhaustive_attr_macros::exhaustive;
22

3-
#[exhaustive(flag = true, string = "foo", integer = 1, float = 4.0, array_of_integers = [1, 2, 3])]
3+
#[exhaustive(flag = true, simple_flag, string = "foo", integer = 1, float = 4.0, array_of_integers = [1, 2, 3])]
44
fn main() {
55
println!("End of main!");
66
}

attribution/src/params.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,20 @@ mod tests {
115115

116116
#[test]
117117
fn parse() {
118-
let attr: Attribute = parse_quote!(#[attr(foo = "fooValue", bar = 1, baz = true)]);
118+
let attr: Attribute =
119+
parse_quote!(#[attr(string = "fooValue", integer = 1, flag = true, simple_flag)]);
119120
if let proc_macro2::TokenTree::Group(group) = attr.tokens.into_iter().next().unwrap() {
120121
let attr_args: Parameters = parse2(group.stream()).unwrap();
121-
let foo_val = attr_args.get(&"foo".into());
122-
let bar_val = attr_args.get(&"bar".into());
123-
let baz_val = attr_args.get(&"baz".into());
122+
let string_val = attr_args.get(&"string".into());
123+
let integer_val = attr_args.get(&"integer".into());
124+
let flag_val = attr_args.get(&"flag".into());
125+
let simple_flag_val = attr_args.get(&"simple_flag".into());
124126
let other_val = attr_args.get(&"other".into());
125127

126-
assert_eq!(foo_val, Some(&ParamVal::Str("fooValue".to_string())));
127-
assert_eq!(bar_val, Some(&ParamVal::Int(1)));
128-
assert_eq!(baz_val, Some(&ParamVal::Bool(true)));
128+
assert_eq!(string_val, Some(&ParamVal::Str("fooValue".to_string())));
129+
assert_eq!(integer_val, Some(&ParamVal::Int(1)));
130+
assert_eq!(flag_val, Some(&ParamVal::Bool(true)));
131+
assert_eq!(simple_flag_val, Some(&ParamVal::Bool(true)));
129132
assert_eq!(other_val, None);
130133
} else {
131134
panic!("Didn't unwrap appropriately");

0 commit comments

Comments
 (0)