From 7c1f9123a4c48893824fa86eb3b47c98e9b0ca21 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 9 May 2022 15:53:16 -0500 Subject: [PATCH] fix(assert): Make sure group members exist before using them In #3711, we had a confusing assert about no non-default members of a required group when there were no defaults involved. This is because there were no valid args in the group but that check happens after. --- src/build/debug_asserts.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/build/debug_asserts.rs b/src/build/debug_asserts.rs index 76bc0a96f09..7b470d84316 100644 --- a/src/build/debug_asserts.rs +++ b/src/build/debug_asserts.rs @@ -301,6 +301,17 @@ pub(crate) fn assert_app(cmd: &Command) { group.name, ); + for arg in &group.args { + // Args listed inside groups should exist + assert!( + cmd.get_arguments().any(|x| x.id == *arg), + "Command {}: Argument group '{}' contains non-existent argument '{:?}'", + cmd.get_name(), + group.name, + arg + ); + } + // Required groups should have at least one arg without default values if group.required && !group.args.is_empty() { assert!( @@ -313,17 +324,6 @@ pub(crate) fn assert_app(cmd: &Command) { group.name ) } - - for arg in &group.args { - // Args listed inside groups should exist - assert!( - cmd.get_arguments().any(|x| x.id == *arg), - "Command {}: Argument group '{}' contains non-existent argument '{:?}'", - cmd.get_name(), - group.name, - arg - ); - } } // Conflicts between flags and subcommands