diff options
author | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2020-09-09 00:39:33 -0400 |
---|---|---|
committer | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2020-09-09 00:39:33 -0400 |
commit | ed21e63be4688c0d986238cc9bd0ee6f208da381 (patch) | |
tree | 977347463287b33610cbb55fd5da892cb4aeb773 /cmd2/argparse_completer.py | |
parent | bd9b7f307f29385244265128f4924abd14f70f39 (diff) | |
parent | 631ed8a5c4f3a6884b5b3398b14998db48b73d40 (diff) | |
download | cmd2-git-ed21e63be4688c0d986238cc9bd0ee6f208da381.tar.gz |
Merge branch 'master' into 2.0
Diffstat (limited to 'cmd2/argparse_completer.py')
-rw-r--r-- | cmd2/argparse_completer.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py index 9d8ccec6..2c1923fc 100644 --- a/cmd2/argparse_completer.py +++ b/cmd2/argparse_completer.py @@ -465,7 +465,25 @@ class ArgparseCompleter: if action.help != argparse.SUPPRESS: match_against.append(flag) - return self._cmd2_app.basic_complete(text, line, begidx, endidx, match_against) + matches = self._cmd2_app.basic_complete(text, line, begidx, endidx, match_against) + + # Build a dictionary linking actions with their matched flag names + matched_actions = dict() # type: Dict[argparse.Action, List[str]] + for flag in matches: + action = self._flag_to_action[flag] + matched_actions.setdefault(action, []) + matched_actions[action].append(flag) + + # For tab completion suggestions, group matched flags by action + for action, option_strings in matched_actions.items(): + flag_text = ', '.join(option_strings) + + # Mark optional flags with brackets + if not action.required: + flag_text = '[' + flag_text + ']' + self._cmd2_app.display_matches.append(flag_text) + + return matches def _format_completions(self, arg_state: _ArgumentState, completions: List[Union[str, CompletionItem]]) -> List[str]: # Check if the results are CompletionItems and that there aren't too many to display |