Store original Attribute of the variants_from_header for spans
diff --git a/syntax/attrs.rs b/syntax/attrs.rs
index a1ad03c..539cfd7 100644
--- a/syntax/attrs.rs
+++ b/syntax/attrs.rs
@@ -33,7 +33,7 @@
pub namespace: Option<&'a mut Namespace>,
pub cxx_name: Option<&'a mut Option<ForeignName>>,
pub rust_name: Option<&'a mut Option<Ident>>,
- pub variants_from_header: Option<&'a mut bool>,
+ pub variants_from_header: Option<&'a mut Option<Attribute>>,
// Suppress clippy needless_update lint ("struct update has no effect, all
// the fields in the struct have already been specified") when preemptively
@@ -130,7 +130,7 @@
cx.push(err);
}
if let Some(variants_from_header) = &mut parser.variants_from_header {
- **variants_from_header = true;
+ **variants_from_header = Some(attr);
continue;
}
} else if attr.path.is_ident("allow")
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 1eae19e..dd5de52 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -37,7 +37,7 @@
use proc_macro2::{Ident, Span};
use syn::punctuated::Punctuated;
use syn::token::{Brace, Bracket, Paren};
-use syn::{Expr, Generics, Lifetime, LitInt, Token, Type as RustType};
+use syn::{Attribute, Expr, Generics, Lifetime, LitInt, Token, Type as RustType};
pub use self::atom::Atom;
pub use self::derive::{Derive, Trait};
@@ -112,6 +112,7 @@
pub brace_token: Brace,
pub variants: Vec<Variant>,
pub variants_from_header: bool,
+ pub variants_from_header_attr: Option<Attribute>,
pub repr: Atom,
pub repr_type: Type,
pub explicit_repr: bool,
diff --git a/syntax/parse.rs b/syntax/parse.rs
index c17cd6e..bcf75ef 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -187,7 +187,7 @@
let mut namespace = namespace.clone();
let mut cxx_name = None;
let mut rust_name = None;
- let mut variants_from_header = false;
+ let mut variants_from_header = None;
let attrs = attrs::parse(
cx,
item.attrs,
@@ -246,6 +246,8 @@
lifetimes: Punctuated::new(),
gt_token: None,
};
+ let variants_from_header_attr = variants_from_header;
+ let variants_from_header = variants_from_header_attr.is_some();
Api::Enum(Enum {
doc,
@@ -258,6 +260,7 @@
brace_token,
variants,
variants_from_header,
+ variants_from_header_attr,
repr,
repr_type,
explicit_repr,