@@ -48,6 +48,7 @@ def __init__(
48
48
append_space = None ,
49
49
):
50
50
self ._parser = argument_parser
51
+ self ._formatter = None
51
52
self .always_complete_options = always_complete_options
52
53
self .exclude = exclude
53
54
if validator is None :
@@ -283,6 +284,15 @@ def __call__(self, parser, namespace, values, option_string=None):
283
284
284
285
return self .active_parsers
285
286
287
+ def _get_action_help (self , action ):
288
+ if action .help is None :
289
+ return ""
290
+ if "%" not in action .help :
291
+ return action .help
292
+ if self ._formatter is None :
293
+ self ._formatter = self ._parser .formatter_class (prog = self ._parser .prog )
294
+ return self ._formatter ._expand_help (action )
295
+
286
296
def _get_subparser_completions (self , parser , cword_prefix ):
287
297
aliases_by_parser : Dict [argparse .ArgumentParser , List [str ]] = {}
288
298
for key in parser .choices .keys ():
@@ -292,7 +302,7 @@ def _get_subparser_completions(self, parser, cword_prefix):
292
302
for action in parser ._get_subactions ():
293
303
for alias in aliases_by_parser [parser .choices [action .dest ]]:
294
304
if alias .startswith (cword_prefix ):
295
- self ._display_completions [alias ] = action . help or ""
305
+ self ._display_completions [alias ] = self . _get_action_help ( action )
296
306
297
307
completions = [subcmd for subcmd in parser .choices .keys () if subcmd .startswith (cword_prefix )]
298
308
return completions
@@ -313,7 +323,7 @@ def _get_option_completions(self, parser, cword_prefix):
313
323
if action .option_strings :
314
324
for option_string in action .option_strings :
315
325
if option_string .startswith (cword_prefix ):
316
- self ._display_completions [option_string ] = action . help or ""
326
+ self ._display_completions [option_string ] = self . _get_action_help ( action )
317
327
318
328
option_completions = []
319
329
for action in parser ._actions :
@@ -405,7 +415,7 @@ def _complete_active_option(self, parser, next_positional, cword_prefix, parsed_
405
415
if self .validator (completion , cword_prefix ):
406
416
completions .append (completion )
407
417
if isinstance (completer , ChoicesCompleter ):
408
- self ._display_completions [completion ] = active_action . help or ""
418
+ self ._display_completions [completion ] = self . _get_action_help ( action )
409
419
else :
410
420
self ._display_completions [completion ] = ""
411
421
else :
0 commit comments