Parse boolean literal in nested meta
diff --git a/src/attr.rs b/src/attr.rs
index 4fede88..2e0cccb 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -282,7 +282,15 @@
}
}
- Some((Meta::Word(ident.clone()).into(), &tts[1..]))
+ let nested_meta = if ident == "true" || ident == "false" {
+ NestedMeta::Literal(Lit::Bool(LitBool {
+ value: ident == "true",
+ span: ident.span(),
+ }))
+ } else {
+ NestedMeta::Meta(Meta::Word(ident.clone()))
+ };
+ Some((nested_meta, &tts[1..]))
}
_ => None,
diff --git a/tests/test_meta_item.rs b/tests/test_meta_item.rs
index 623e5da..8a0fed0 100644
--- a/tests/test_meta_item.rs
+++ b/tests/test_meta_item.rs
@@ -167,6 +167,23 @@
)
}
+#[test]
+fn test_bool_lit() {
+ run_test(
+ "#[foo(true)]",
+ MetaList {
+ ident: ident("foo").into(),
+ paren_token: Default::default(),
+ nested: punctuated![
+ NestedMeta::Literal(Lit::Bool(LitBool {
+ value: true,
+ span: Span::call_site(),
+ })),
+ ],
+ },
+ )
+}
+
fn run_test<T: Into<Meta>>(input: &str, expected: T) {
let attrs = Attribute::parse_outer.parse_str(input).unwrap();
assert_eq!(attrs.len(), 1);