@@ -48,6 +48,7 @@ def __init__(
4848 append_space = None ,
4949 ):
5050 self ._parser = argument_parser
51+ self ._formatter = None
5152 self .always_complete_options = always_complete_options
5253 self .exclude = exclude
5354 if validator is None :
@@ -283,6 +284,15 @@ def __call__(self, parser, namespace, values, option_string=None):
283284
284285 return self .active_parsers
285286
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+
286296 def _get_subparser_completions (self , parser , cword_prefix ):
287297 aliases_by_parser : Dict [argparse .ArgumentParser , List [str ]] = {}
288298 for key in parser .choices .keys ():
@@ -292,7 +302,7 @@ def _get_subparser_completions(self, parser, cword_prefix):
292302 for action in parser ._get_subactions ():
293303 for alias in aliases_by_parser [parser .choices [action .dest ]]:
294304 if alias .startswith (cword_prefix ):
295- self ._display_completions [alias ] = action . help or ""
305+ self ._display_completions [alias ] = self . _get_action_help ( action )
296306
297307 completions = [subcmd for subcmd in parser .choices .keys () if subcmd .startswith (cword_prefix )]
298308 return completions
@@ -313,7 +323,7 @@ def _get_option_completions(self, parser, cword_prefix):
313323 if action .option_strings :
314324 for option_string in action .option_strings :
315325 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 )
317327
318328 option_completions = []
319329 for action in parser ._actions :
@@ -405,7 +415,7 @@ def _complete_active_option(self, parser, next_positional, cword_prefix, parsed_
405415 if self .validator (completion , cword_prefix ):
406416 completions .append (completion )
407417 if isinstance (completer , ChoicesCompleter ):
408- self ._display_completions [completion ] = active_action . help or ""
418+ self ._display_completions [completion ] = self . _get_action_help ( action )
409419 else :
410420 self ._display_completions [completion ] = ""
411421 else :
0 commit comments