@@ -576,7 +576,7 @@ impl<'a, 'b> Parser<'a, 'b>
576
576
#[ inline]
577
577
pub fn has_visible_subcommands ( & self ) -> bool {
578
578
if self . subcommands . is_empty ( ) { return false ; }
579
- self . subcommands . iter ( ) . any ( |s| !s. is_set ( AppSettings :: Hidden ) )
579
+ self . subcommands . iter ( ) . any ( |s| !s. p . is_set ( AS :: Hidden ) )
580
580
}
581
581
582
582
#[ inline]
@@ -2118,15 +2118,16 @@ impl<'a, 'b> Parser<'a, 'b>
2118
2118
if let Some ( u) = self . meta . usage_str {
2119
2119
usage. push_str ( & * u) ;
2120
2120
} else if used. is_empty ( ) {
2121
- usage . push_str ( & * self . meta
2121
+ let name = self . meta
2122
2122
. usage
2123
2123
. as_ref ( )
2124
2124
. unwrap_or_else ( || {
2125
2125
self . meta
2126
2126
. bin_name
2127
2127
. as_ref ( )
2128
2128
. unwrap_or ( & self . meta . name )
2129
- } ) ) ;
2129
+ } ) ;
2130
+ usage. push_str ( & * name) ;
2130
2131
let mut reqs: Vec < & str > = self . required ( ) . map ( |r| & * * r) . collect ( ) ;
2131
2132
reqs. dedup ( ) ;
2132
2133
let req_string = self . get_required_from ( & reqs, None , None )
@@ -2139,9 +2140,9 @@ impl<'a, 'b> Parser<'a, 'b>
2139
2140
} else if flags {
2140
2141
usage. push_str ( " [OPTIONS]" ) ;
2141
2142
}
2142
- if !self . is_set ( AS :: UnifiedHelpMessage ) && self . has_opts ( ) &&
2143
+ if !self . is_set ( AS :: UnifiedHelpMessage ) &&
2143
2144
self . opts . iter ( ) . any ( |o| !o. is_set ( ArgSettings :: Required ) &&
2144
- !o. is_set ! ( AS :: Hidden ) ) {
2145
+ !o. is_set ( ArgSettings :: Hidden ) ) {
2145
2146
usage. push_str ( " [OPTIONS]" ) ;
2146
2147
}
2147
2148
@@ -2152,7 +2153,7 @@ impl<'a, 'b> Parser<'a, 'b>
2152
2153
if self . has_positionals ( ) &&
2153
2154
self . opts . iter ( ) . any ( |o| o. is_set ( ArgSettings :: Multiple ) ) &&
2154
2155
self . positionals . values ( ) . any ( |p| !p. is_set ( ArgSettings :: Required ) ) &&
2155
- !self . has_subcommands ( ) {
2156
+ !self . has_visible_subcommands ( ) {
2156
2157
usage. push_str ( " [--]" )
2157
2158
}
2158
2159
if self . has_positionals ( ) &&
@@ -2166,11 +2167,19 @@ impl<'a, 'b> Parser<'a, 'b>
2166
2167
}
2167
2168
2168
2169
2169
- if self . has_subcommands ( ) && !self . is_set ( AS :: SubcommandRequired ) {
2170
- usage. push_str ( " [SUBCOMMAND]" ) ;
2171
- } else if ( self . is_set ( AS :: SubcommandRequired ) ||
2172
- self . is_set ( AS :: SubcommandRequiredElseHelp ) ) && self . has_subcommands ( ) {
2173
- usage. push_str ( " <SUBCOMMAND>" ) ;
2170
+ if self . is_set ( AS :: SubcommandsNegateReqs ) || self . is_set ( AS :: ArgsNegateSubcommands ) {
2171
+ if self . has_visible_subcommands ( ) {
2172
+ usage. push_str ( "\n " ) ;
2173
+ usage. push_str ( & * name) ;
2174
+ usage. push_str ( " <SUBCOMMAND>" ) ;
2175
+ }
2176
+ } else {
2177
+ if self . has_visible_subcommands ( ) && !self . is_set ( AS :: SubcommandRequired ) {
2178
+ usage. push_str ( " [SUBCOMMAND]" ) ;
2179
+ } else if ( self . is_set ( AS :: SubcommandRequired ) ||
2180
+ self . is_set ( AS :: SubcommandRequiredElseHelp ) ) && self . has_subcommands ( ) {
2181
+ usage. push_str ( " <SUBCOMMAND>" ) ;
2182
+ }
2174
2183
}
2175
2184
} else {
2176
2185
self . smart_usage ( & mut usage, used) ;
0 commit comments