xso-proc: fix warnings when struct names end on _
This commit is contained in:
parent
76cd077490
commit
1265f4bb67
2 changed files with 28 additions and 2 deletions
|
@ -64,6 +64,16 @@ pub(crate) struct StructDef {
|
||||||
debug: bool,
|
debug: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn concat_camel_case(lhs: &Ident, suffix: &str) -> Ident {
|
||||||
|
let span = lhs.span();
|
||||||
|
let mut s = lhs.to_string();
|
||||||
|
while s.ends_with('_') {
|
||||||
|
s.pop();
|
||||||
|
}
|
||||||
|
s.push_str(suffix);
|
||||||
|
Ident::new(&s, span)
|
||||||
|
}
|
||||||
|
|
||||||
impl StructDef {
|
impl StructDef {
|
||||||
/// Create a new struct from its name, meta, and fields.
|
/// Create a new struct from its name, meta, and fields.
|
||||||
pub(crate) fn new(ident: &Ident, meta: XmlCompoundMeta, fields: &Fields) -> Result<Self> {
|
pub(crate) fn new(ident: &Ident, meta: XmlCompoundMeta, fields: &Fields) -> Result<Self> {
|
||||||
|
@ -80,8 +90,8 @@ impl StructDef {
|
||||||
name,
|
name,
|
||||||
inner: Compound::from_fields(fields)?,
|
inner: Compound::from_fields(fields)?,
|
||||||
target_ty_ident: ident.clone(),
|
target_ty_ident: ident.clone(),
|
||||||
builder_ty_ident: quote::format_ident!("{}FromXmlBuilder", ident),
|
builder_ty_ident: concat_camel_case(ident, "FromXmlBuilder"),
|
||||||
item_iter_ty_ident: quote::format_ident!("{}AsXmlIterator", ident),
|
item_iter_ty_ident: concat_camel_case(ident, "AsXmlIterator"),
|
||||||
debug: meta.debug.is_set(),
|
debug: meta.debug.is_set(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,19 @@
|
||||||
|
Version NEXT:
|
||||||
|
0000-00-00 Jonas Schäfer <jonas@zombofant.net>
|
||||||
|
* Breaking
|
||||||
|
- We now strip trailing underscores from identifiers before constructing
|
||||||
|
any type names we declare from derive macros. That means that it is
|
||||||
|
not possible to derive the traits on `Foo` and `Foo_` if both live
|
||||||
|
in the same scope.
|
||||||
|
|
||||||
|
As a workaround, you can put either of these types into a `mod` and
|
||||||
|
reexport them from the outer module. The types generated by the derive
|
||||||
|
macro will then be scoped inside the `mod` and cannot conflict with
|
||||||
|
the derived types on the other type.
|
||||||
|
|
||||||
|
All this is to avoid triggering the camel case lint on the types we
|
||||||
|
generate.
|
||||||
|
|
||||||
Version 0.1.2:
|
Version 0.1.2:
|
||||||
2024-07-26 Jonas Schäfer <jonas@zombofant.net>
|
2024-07-26 Jonas Schäfer <jonas@zombofant.net>
|
||||||
* Added
|
* Added
|
||||||
|
|
Loading…
Reference in a new issue