From 66b9ace1d3755892d757977197b0fc4bc7bd277b Mon Sep 17 00:00:00 2001 From: Andrey Zgarbul Date: Sun, 23 Aug 2026 16:06:54 +0300 Subject: [PATCH] sort-fields flag --- src/config.rs | 14 ++++++++++++++ src/generate/register.rs | 10 +++++++++- src/main.rs | 8 ++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 06b732d9..374cbf7a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -43,6 +43,7 @@ pub struct Config { pub ident_formats: IdentFormats, pub ident_formats_theme: Option, pub field_names_for_enums: bool, + pub sort_fields: SortDir, pub base_address_shift: u64, /// Path to YAML file with chip-specific settings pub settings_file: Option, @@ -347,6 +348,19 @@ pub enum IdentFormatsTheme { Legacy, } +#[cfg_attr( + feature = "serde", + derive(serde::Deserialize), + serde(rename_all = "lowercase") +)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +pub enum SortDir { + #[default] + Direct, + Reverse, + None, +} + #[cfg_attr(feature = "serde", derive(serde::Deserialize), serde(default))] #[derive(Clone, PartialEq, Eq, Debug, Default)] #[non_exhaustive] diff --git a/src/generate/register.rs b/src/generate/register.rs index 4bff2b8f..46f0686c 100644 --- a/src/generate/register.rs +++ b/src/generate/register.rs @@ -628,7 +628,15 @@ pub fn fields( let can_read = access.can_read(); let can_write = access.can_write(); - fields.sort_by_key(|f| f.bit_offset()); + match config.sort_fields { + crate::config::SortDir::Direct => { + fields.sort_by_key(|f| f.bit_offset()); + } + crate::config::SortDir::Reverse => { + fields.sort_by_key(|f| -(f.bit_offset() as i32)); + } + crate::config::SortDir::None => {} + } // Hack for #625 let mut enum_derives = HashSet::new(); diff --git a/src/main.rs b/src/main.rs index fcee4cc7..8c8fdeb5 100755 --- a/src/main.rs +++ b/src/main.rs @@ -200,6 +200,14 @@ Allowed cases are `unchanged` (''), `pascal` ('p'), `constant` ('c') and `snake` .action(ArgAction::SetTrue) .help("Use field name for enumerations even when enumeratedValues has a name"), ) + .arg( + Arg::new("sort_fields") + .long("sort-fields") + .alias("sort_fields") + .help("Sort fields direct or reverse by offset") + .action(ArgAction::Set) + .value_name("DIRECTION"), + ) .arg( Arg::new("max_cluster_size") .long("max-cluster-size")