Skip to content

Commit 4813f56

Browse files
committed
always use field names as base for enum names
1 parent f9b0e25 commit 4813f56

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

src/config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub struct Config {
3333
pub reexport_interrupt: bool,
3434
pub ident_formats: IdentFormats,
3535
pub ident_formats_theme: Option<IdentFormatsTheme>,
36+
pub field_names_for_enums: bool,
3637
pub base_address_shift: u64,
3738
}
3839

src/generate/register.rs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,11 @@ pub fn fields(
756756
// get the type of value structure. It can be generated from either name field
757757
// in enumeratedValues if it's an enumeration, or from field name directly if it's not.
758758
let value_read_ty = ident(
759-
ev.values().name.as_deref().unwrap_or(&name),
759+
if config.field_names_for_enums {
760+
&name
761+
} else {
762+
ev.values().name.as_deref().unwrap_or(&name)
763+
},
760764
config,
761765
fmt,
762766
span,
@@ -909,7 +913,16 @@ pub fn fields(
909913
}
910914
}
911915
EV::Derived(_, base) => {
912-
let base_ident = ident(&base.name, config, fmt, span);
916+
let base_ident = if config.field_names_for_enums {
917+
ident(
918+
&util::replace_suffix(&base.field().name, ""),
919+
config,
920+
fmt,
921+
span,
922+
)
923+
} else {
924+
ident(&base.name, config, fmt, span)
925+
};
913926
if !derives.contains(&value_read_ty) {
914927
let base_path = base_syn_path(base, &fpath, &base_ident, config)?;
915928
mod_items.extend(quote! {
@@ -1096,7 +1109,11 @@ pub fn fields(
10961109
fmt = "enum_name";
10971110
};
10981111
let value_write_ty = ident(
1099-
ev.values().name.as_deref().unwrap_or(&name),
1112+
if config.field_names_for_enums {
1113+
&name
1114+
} else {
1115+
ev.values().name.as_deref().unwrap_or(&name)
1116+
},
11001117
config,
11011118
fmt,
11021119
span,
@@ -1164,8 +1181,16 @@ pub fn fields(
11641181
}
11651182
}
11661183
EV::Derived(_, base) => {
1167-
let base_ident = ident(&base.name, config, fmt, span);
1168-
1184+
let base_ident = if config.field_names_for_enums {
1185+
ident(
1186+
&util::replace_suffix(&base.field().name, ""),
1187+
config,
1188+
fmt,
1189+
span,
1190+
)
1191+
} else {
1192+
ident(&base.name, config, fmt, span)
1193+
};
11691194
if rwenum.generate_write_enum() && !derives.contains(&value_write_ty) {
11701195
let base_path = base_syn_path(base, &fpath, &base_ident, config)?;
11711196
mod_items.extend(quote! {

src/main.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,18 @@ Allowed cases are `unchanged` (''), `pascal` ('p'), `constant` ('c') and `snake`
172172
.arg(
173173
Arg::new("ident_formats_theme")
174174
.long("ident-formats-theme")
175+
.alias("ident_formats_theme")
175176
.help("A set of `ident_format` settings. `new` or `legacy`")
176177
.action(ArgAction::Set)
177178
.value_name("THEME"),
178179
)
180+
.arg(
181+
Arg::new("field_names_for_enums")
182+
.long("field-names-for-enums")
183+
.alias("field_names_for_enums")
184+
.action(ArgAction::SetTrue)
185+
.help("Use field name for enumerations even when enumeratedValues has a name"),
186+
)
179187
.arg(
180188
Arg::new("max_cluster_size")
181189
.long("max-cluster-size")

0 commit comments

Comments
 (0)