diff --git a/proxmox-router/src/cli/format.rs b/proxmox-router/src/cli/format.rs index 6f0ec50c..a35821a6 100644 --- a/proxmox-router/src/cli/format.rs +++ b/proxmox-router/src/cli/format.rs @@ -139,7 +139,10 @@ pub(crate) fn generate_usage_str_do<'cli>( let mut options = String::new(); - for (prop, optional, param_schema) in schema.properties() { + let mut properties: Vec<_> = schema.properties().collect(); + properties.sort_by(|a, b| a.0.cmp(b.0)); + + for (prop, optional, param_schema) in properties { if done_hash.contains(prop) { continue; } @@ -212,9 +215,12 @@ pub(crate) fn generate_usage_str_do<'cli>( let mut global_options = String::new(); - for (name, _optional, param_schema) in - global_options_iter.flat_map(|o| o.schema.any_object().unwrap().properties()) - { + let mut properties: Vec<_> = global_options_iter + .flat_map(|o| o.schema.any_object().unwrap().properties()) + .collect(); + properties.sort_by(|a, b| a.0.cmp(b.0)); + + for (name, _optional, param_schema) in properties { if done_hash.contains(name) { continue; } @@ -325,12 +331,14 @@ impl<'cli> UsageState<'cli> { let mut out = String::new(); let _ = write!(out, "Options available for command group ``{prefix}``:"); for opt in opts { - for (name, _optional, schema) in opt + let mut properties: Vec<_> = opt .schema .any_object() .expect("non-object schema in global optiosn") .properties() - { + .collect(); + properties.sort_by(|a, b| a.0.cmp(b.0)); + for (name, _optional, schema) in properties { let _ = write!( out, "\n\n{}", diff --git a/proxmox-router/tests/docs.rs b/proxmox-router/tests/docs.rs index f23a872a..74bc99b6 100644 --- a/proxmox-router/tests/docs.rs +++ b/proxmox-router/tests/docs.rs @@ -109,26 +109,26 @@ fn expected_toplevel_help_text() -> &'static str { Usage: clicmd help [{}] [OPTIONS] -clicmd l0c1 --required-arg --another-required-arg [OPTIONS] +clicmd l0c1 --another-required-arg --required-arg [OPTIONS] clicmd l0c2 --another-required-arg [OPTIONS] -clicmd l0sub l1c1 --required-arg --another-required-arg [OPTIONS] -clicmd l0sub l1c2 --required-arg --another-required-arg [OPTIONS] +clicmd l0sub l1c1 --another-required-arg --required-arg [OPTIONS] +clicmd l0sub l1c2 --another-required-arg --required-arg [OPTIONS] "## .trim_start() } fn expected_group_help_text() -> &'static str { r##" -Usage: clicmd l0sub l1c1 --required-arg --another-required-arg [OPTIONS] +Usage: clicmd l0sub l1c1 --another-required-arg --required-arg [OPTIONS] Simple API method with one required and one optional argument. - --required-arg - Required string argument. - --another-required-arg A second required string argument. + --required-arg + Required string argument. + Optional parameters: --optional-arg (default=false) @@ -161,16 +161,16 @@ Optional parameters: ---- -``clicmd l0c1 --required-arg --another-required-arg [OPTIONS]`` +``clicmd l0c1 --another-required-arg --required-arg [OPTIONS]`` Simple API method with one required and one optional argument. -``--required-arg`` ```` - Required string argument. - ``--another-required-arg`` ```` A second required string argument. +``--required-arg`` ```` + Required string argument. + Optional parameters: ``--optional-arg`` `` (default=false)`` @@ -205,16 +205,16 @@ Options available for command group ``clicmd l0sub``: ---- -``clicmd l0sub l1c1 --required-arg --another-required-arg [OPTIONS]`` +``clicmd l0sub l1c1 --another-required-arg --required-arg [OPTIONS]`` Simple API method with one required and one optional argument. -``--required-arg`` ```` - Required string argument. - ``--another-required-arg`` ```` A second required string argument. +``--required-arg`` ```` + Required string argument. + Optional parameters: ``--optional-arg`` `` (default=false)`` @@ -228,16 +228,16 @@ Inherited group parameters: ---- -``clicmd l0sub l1c2 --required-arg --another-required-arg [OPTIONS]`` +``clicmd l0sub l1c2 --another-required-arg --required-arg [OPTIONS]`` Simple API method with one required and one optional argument. -``--required-arg`` ```` - Required string argument. - ``--another-required-arg`` ```` A second required string argument. +``--required-arg`` ```` + Required string argument. + Optional parameters: ``--optional-arg`` `` (default=false)``