Skip to content

Commit a2b8bc6

Browse files
authored
Format help placeholders
Fixes #540
1 parent 0f0797b commit a2b8bc6

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

argcomplete/finders.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)