Skip to content

Commit e8459e0

Browse files
committed
to_xx_case_ident
1 parent 9204e9e commit e8459e0

File tree

3 files changed

+58
-69
lines changed

3 files changed

+58
-69
lines changed

src/generate/peripheral.rs

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,9 @@ pub fn render(p_original: &Peripheral, index: &Index, config: &Config) -> Result
3535
let address = util::hex(p.base_address as u64);
3636
let description = util::respace(p.description.as_ref().unwrap_or(&p.name));
3737

38-
let name_snake_case = Ident::new(&name.to_sanitized_snake_case(), span);
38+
let name_snake_case = name.to_snake_case_ident(span);
3939
let (derive_regs, base, path) = if let Some(path) = path {
40-
(
41-
true,
42-
Ident::new(&path.peripheral.to_sanitized_snake_case(), span),
43-
path,
44-
)
40+
(true, path.peripheral.to_snake_case_ident(span), path)
4541
} else {
4642
(false, name_snake_case.clone(), BlockPath::new(&p.name))
4743
};
@@ -705,13 +701,11 @@ fn expand_cluster(
705701
let mut accessors = TokenStream::new();
706702
let nb_name = util::replace_suffix(&info.name, "");
707703
let ty = name_to_ty(&nb_name, name)?;
708-
let nb_name_cs = Ident::new(&nb_name.to_sanitized_snake_case(), span);
704+
let nb_name_cs = nb_name.to_snake_case_ident(span);
709705
let description = info.description.as_ref().unwrap_or(&info.name);
710706
for (i, idx) in array_info.indexes().enumerate() {
711-
let idx_name = Ident::new(
712-
&util::replace_suffix(&info.name, &idx).to_sanitized_snake_case(),
713-
span,
714-
);
707+
let idx_name =
708+
util::replace_suffix(&info.name, &idx).to_snake_case_ident(span);
715709
let comment = make_comment(
716710
cluster_size,
717711
info.address_offset + (i as u32) * cluster_size / 8,
@@ -814,14 +808,12 @@ fn expand_register(
814808
let mut accessors = TokenStream::new();
815809
let nb_name = util::replace_suffix(&info.fullname(config.ignore_groups), "");
816810
let ty = name_to_wrapped_ty(&nb_name, name)?;
817-
let nb_name_cs = Ident::new(&nb_name.to_sanitized_snake_case(), span);
811+
let nb_name_cs = nb_name.to_snake_case_ident(span);
818812
let description = info.description.clone().unwrap_or_default();
819813
let info_name = info.fullname(config.ignore_groups);
820814
for (i, idx) in array_info.indexes().enumerate() {
821-
let idx_name = Ident::new(
822-
&util::replace_suffix(&info_name, &idx).to_sanitized_snake_case(),
823-
span,
824-
);
815+
let idx_name =
816+
util::replace_suffix(&info_name, &idx).to_snake_case_ident(span);
825817
let comment = make_comment(
826818
register_size,
827819
info.address_offset + (i as u32) * register_size / 8,
@@ -933,7 +925,7 @@ fn cluster_block(
933925
let description =
934926
util::escape_brackets(&util::respace(c.description.as_ref().unwrap_or(&c.name)));
935927

936-
let name_snake_case = Ident::new(&mod_name.to_sanitized_snake_case(), Span::call_site());
928+
let name_snake_case = mod_name.to_snake_case_ident(Span::call_site());
937929

938930
Ok(quote! {
939931
#reg_block
@@ -962,7 +954,10 @@ fn expand_svd_register(
962954

963955
let ty = name_to_wrapped_ty(&ty_name, name)?;
964956

965-
out.push(new_syn_field(&nb_name.to_sanitized_snake_case(), ty));
957+
out.push(new_syn_field(
958+
nb_name.to_snake_case_ident(Span::call_site()),
959+
ty,
960+
));
966961
}
967962
Ok(out)
968963
} else {
@@ -981,7 +976,7 @@ fn convert_svd_register(
981976
let info_name = info.fullname(ignore_group);
982977
let ty = name_to_wrapped_ty(&info_name, name)
983978
.with_context(|| format!("Error converting register name {info_name}"))?;
984-
new_syn_field(&info_name.to_sanitized_snake_case(), ty)
979+
new_syn_field(info_name.to_snake_case_ident(Span::call_site()), ty)
985980
}
986981
Register::Array(info, array_info) => {
987982
let info_name = info.fullname(ignore_group);
@@ -990,7 +985,7 @@ fn convert_svd_register(
990985
.with_context(|| format!("Error converting register name {nb_name}"))?;
991986
let array_ty = new_syn_array(ty, array_info.dim)?;
992987

993-
new_syn_field(&nb_name.to_sanitized_snake_case(), array_ty)
988+
new_syn_field(nb_name.to_snake_case_ident(Span::call_site()), array_ty)
994989
}
995990
})
996991
}
@@ -1011,7 +1006,10 @@ fn array_proxy(
10111006
))?;
10121007

10131008
Ok(RegisterBlockField {
1014-
syn_field: new_syn_field(&ty_name.to_sanitized_snake_case(), ap_path.into()),
1009+
syn_field: new_syn_field(
1010+
ty_name.to_snake_case_ident(Span::call_site()),
1011+
ap_path.into(),
1012+
),
10151013
description: info.description.as_ref().unwrap_or(&info.name).into(),
10161014
offset: info.address_offset,
10171015
size: 0,
@@ -1034,7 +1032,10 @@ fn expand_svd_cluster(
10341032

10351033
let ty = name_to_ty(&ty_name, name)?;
10361034

1037-
out.push(new_syn_field(&nb_name.to_sanitized_snake_case(), ty));
1035+
out.push(new_syn_field(
1036+
nb_name.to_snake_case_ident(Span::call_site()),
1037+
ty,
1038+
));
10381039
}
10391040
Ok(out)
10401041
} else {
@@ -1048,22 +1049,22 @@ fn convert_svd_cluster(cluster: &Cluster, name: Option<&str>) -> Result<syn::Fie
10481049
Cluster::Single(info) => {
10491050
let ty_name = util::replace_suffix(&info.name, "");
10501051
let ty = name_to_ty(&ty_name, name)?;
1051-
new_syn_field(&info.name.to_sanitized_snake_case(), ty)
1052+
new_syn_field(info.name.to_snake_case_ident(Span::call_site()), ty)
10521053
}
10531054
Cluster::Array(info, array_info) => {
10541055
let ty_name = util::replace_suffix(&info.name, "");
10551056
let ty = name_to_ty(&ty_name, name)?;
10561057
let array_ty = new_syn_array(ty, array_info.dim)?;
10571058

1058-
new_syn_field(&ty_name.to_sanitized_snake_case(), array_ty)
1059+
new_syn_field(ty_name.to_snake_case_ident(Span::call_site()), array_ty)
10591060
}
10601061
})
10611062
}
10621063

1063-
fn new_syn_field(ident: &str, ty: syn::Type) -> syn::Field {
1064+
fn new_syn_field(ident: Ident, ty: syn::Type) -> syn::Field {
10641065
let span = Span::call_site();
10651066
syn::Field {
1066-
ident: Some(Ident::new(ident, span)),
1067+
ident: Some(ident),
10671068
vis: syn::Visibility::Public(syn::VisPublic {
10681069
pub_token: Token![pub](span),
10691070
}),

src/generate/register.rs

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,9 @@ pub fn render(
2525
let access = util::access_of(properties, register.fields.as_deref());
2626
let name = util::name_of(register, config.ignore_groups);
2727
let span = Span::call_site();
28-
let name_constant_case = Ident::new(&name.to_sanitized_constant_case(), span);
29-
let name_constant_case_spec = Ident::new(
30-
&format!("{}_SPEC", &name.to_sanitized_constant_case()),
31-
span,
32-
);
33-
let name_snake_case = Ident::new(&name.to_sanitized_snake_case(), span);
28+
let name_constant_case = name.to_constant_case_ident(span);
29+
let name_constant_case_spec = format!("{name}_SPEC").to_constant_case_ident(span);
30+
let name_snake_case = name.to_snake_case_ident(span);
3431
let rsize = properties
3532
.size
3633
.ok_or_else(|| anyhow!("Register {} has no `size` field", register.name))?;
@@ -348,7 +345,7 @@ pub fn fields(
348345
// TODO(AJM) - do we need to do anything with this range type?
349346
let BitRange { offset, width, .. } = f.bit_range;
350347
let name = util::replace_suffix(&f.name, "");
351-
let name_snake_case = Ident::new(&name.to_sanitized_snake_case(), span);
348+
let name_snake_case = name.to_snake_case_ident(span);
352349
let name_constant_case = name.to_sanitized_constant_case();
353350
let description_raw = f.description.as_deref().unwrap_or(""); // raw description, if absent using empty string
354351
let description = util::respace(&util::escape_brackets(description_raw));
@@ -456,14 +453,10 @@ pub fn fields(
456453
let value_read_ty = if let Some((evs, _)) = lookup_filter(&lookup_results, Usage::Read)
457454
{
458455
if let Some(enum_name) = &evs.name {
459-
let enum_name_constant_case = enum_name.to_sanitized_constant_case();
460-
let enum_value_read_ty =
461-
Ident::new(&format!("{enum_name_constant_case}_A"), span);
462-
enum_value_read_ty
456+
format!("{enum_name}_A").to_constant_case_ident(span)
463457
} else {
464-
let derived_field_value_read_ty =
465-
Ident::new(&format!("{name_constant_case}_A"), span);
466-
derived_field_value_read_ty
458+
// derived_field_value_read_ty
459+
Ident::new(&format!("{name_constant_case}_A"), span)
467460
}
468461
} else {
469462
// raw_field_value_read_ty
@@ -620,8 +613,7 @@ pub fn fields(
620613
evs_r = Some(evs.clone());
621614
// generate pub use field_1 reader as field_2 reader
622615
let base_field = util::replace_suffix(&base.field.name, "");
623-
let base_constant_case = base_field.to_sanitized_constant_case();
624-
let base_r = Ident::new(&(base_constant_case + "_R"), span);
616+
let base_r = (base_field + "_R").to_constant_case_ident(span);
625617
if !reader_derives.contains(&reader_ty) {
626618
derive_from_base(
627619
mod_items,
@@ -678,10 +670,8 @@ pub fn fields(
678670
self.bits
679671
}
680672
};
681-
let name_snake_case_n = Ident::new(
682-
&util::replace_suffix(&f.name, suffix).to_sanitized_snake_case(),
683-
Span::call_site(),
684-
);
673+
let name_snake_case_n = util::replace_suffix(&f.name, suffix)
674+
.to_snake_case_ident(Span::call_site());
685675
let doc = util::replace_suffix(
686676
&description_with_bits(description_raw, sub_offset, width),
687677
suffix,
@@ -741,14 +731,10 @@ pub fn fields(
741731
"A"
742732
};
743733
if let Some(enum_name) = &evs.name {
744-
let enum_name_constant_case = enum_name.to_sanitized_constant_case();
745-
let enum_value_write_ty =
746-
Ident::new(&format!("{enum_name_constant_case}_{ty_suffix}"), span);
747-
enum_value_write_ty
734+
format!("{enum_name}_{ty_suffix}").to_constant_case_ident(span)
748735
} else {
749-
let derived_field_value_write_ty =
750-
Ident::new(&format!("{name_constant_case}_{ty_suffix}"), span);
751-
derived_field_value_write_ty
736+
// derived_field_value_write_ty
737+
Ident::new(&format!("{name_constant_case}_{ty_suffix}"), span)
752738
}
753739
} else {
754740
// raw_field_value_write_ty
@@ -887,8 +873,7 @@ pub fn fields(
887873

888874
// generate pub use field_1 writer as field_2 writer
889875
let base_field = util::replace_suffix(&base.field.name, "");
890-
let base_constant_case = base_field.to_sanitized_constant_case();
891-
let base_w = Ident::new(&(base_constant_case + "_W"), span);
876+
let base_w = (base_field + "_W").to_constant_case_ident(span);
892877
if !writer_derives.contains(&writer_ty) {
893878
derive_from_base(
894879
mod_items,
@@ -915,10 +900,8 @@ pub fn fields(
915900

916901
for (i, suffix) in (0..*dim).zip(suffixes.iter()) {
917902
let sub_offset = offset + (i as u64) * (*increment as u64);
918-
let name_snake_case_n = Ident::new(
919-
&util::replace_suffix(&f.name, suffix).to_sanitized_snake_case(),
920-
Span::call_site(),
921-
);
903+
let name_snake_case_n = &util::replace_suffix(&f.name, suffix)
904+
.to_snake_case_ident(Span::call_site());
922905
let doc = util::replace_suffix(
923906
&description_with_bits(description_raw, sub_offset, width),
924907
suffix,
@@ -997,14 +980,11 @@ impl Variant {
997980
.description
998981
.clone()
999982
.unwrap_or_else(|| format!("`{value:b}`")),
1000-
pc: Ident::new(
1001-
&(if pc {
1002-
ev.name.to_sanitized_pascal_case()
1003-
} else {
1004-
ev.name.to_sanitized_constant_case()
1005-
}),
1006-
span,
1007-
),
983+
pc: if pc {
984+
ev.name.to_pascal_case_ident(span)
985+
} else {
986+
ev.name.to_constant_case_ident(span)
987+
},
1008988
nksc: Ident::new(&nksc, span),
1009989
sc: Ident::new(&sc, span),
1010990
value,
@@ -1152,8 +1132,7 @@ fn derive_from_base(
11521132
let path = if base.register() == field.register() {
11531133
quote! { #base_pc }
11541134
} else if base.register().block == field.register().block {
1155-
let mod_ = base.register().name.to_sanitized_snake_case();
1156-
let mod_ = Ident::new(&mod_, span);
1135+
let mod_ = base.register().name.to_snake_case_ident(span);
11571136

11581137
quote! { super::#mod_::#base_pc }
11591138
} else {

src/util.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,16 @@ pub trait ToSanitizedCase {
127127
///
128128
/// Use on name of enumeration values.
129129
fn to_sanitized_pascal_case(&self) -> Cow<str>;
130+
fn to_pascal_case_ident(&self, span: Span) -> Ident {
131+
Ident::new(&self.to_sanitized_pascal_case(), span)
132+
}
130133
/// Convert self into CONSTANT_CASE.
131134
///
132135
/// Use on name of reader structs, writer structs and enumerations.
133136
fn to_sanitized_constant_case(&self) -> Cow<str>;
137+
fn to_constant_case_ident(&self, span: Span) -> Ident {
138+
Ident::new(&self.to_sanitized_constant_case(), span)
139+
}
134140
/// Convert self into snake_case, must use only if the target is used with extra prefix or suffix.
135141
fn to_sanitized_not_keyword_snake_case(&self) -> Cow<str>; // snake_case
136142
/// Convert self into snake_case target and ensure target is not a Rust keyword.
@@ -143,6 +149,9 @@ pub trait ToSanitizedCase {
143149
let s = self.to_sanitized_not_keyword_snake_case();
144150
sanitize_keyword(s)
145151
}
152+
fn to_snake_case_ident(&self, span: Span) -> Ident {
153+
Ident::new(&self.to_sanitized_snake_case(), span)
154+
}
146155
}
147156

148157
impl ToSanitizedCase for str {

0 commit comments

Comments
 (0)