diff options
author | Kevin Van Brunt <kmvanbrunt@gmail.com> | 2019-07-16 14:13:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-16 14:13:58 -0400 |
commit | 15b043c51433e8fd3c5495c3275e3156b5cbc3f6 (patch) | |
tree | b116b60d6bfd52ab37d3568028810c30c1b40257 /cmd2/parsing.py | |
parent | 1707ab8d5ee53b809af0d6ebbe5c12a48850dbe5 (diff) | |
parent | ddb7b9243bcbfaf7e419e61b9cb9e0f49aa752b3 (diff) | |
download | cmd2-git-15b043c51433e8fd3c5495c3275e3156b5cbc3f6.tar.gz |
Merge pull request #721 from python-cmd2/default_sort_key
Default sort key
Diffstat (limited to 'cmd2/parsing.py')
-rw-r--r-- | cmd2/parsing.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cmd2/parsing.py b/cmd2/parsing.py index 2e94516a..dbfabc80 100644 --- a/cmd2/parsing.py +++ b/cmd2/parsing.py @@ -249,7 +249,7 @@ class StatementParser: terminators: Optional[Iterable[str]] = None, multiline_commands: Optional[Iterable[str]] = None, aliases: Optional[Dict[str, str]] = None, - shortcuts: Optional[Iterable[Tuple[str, str]]] = None) -> None: + shortcuts: Optional[Dict[str, str]] = None) -> None: """Initialize an instance of StatementParser. The following will get converted to an immutable tuple before storing internally: @@ -261,7 +261,7 @@ class StatementParser: :param terminators: iterable containing strings which should terminate multiline commands :param multiline_commands: iterable containing the names of commands that accept multiline input :param aliases: dictionary containing aliases - :param shortcuts: an iterable of tuples with each tuple containing the shortcut and the expansion + :param shortcuts: dictionary containing shortcuts """ self.allow_redirection = allow_redirection if terminators is None: @@ -276,10 +276,13 @@ class StatementParser: self.aliases = dict() else: self.aliases = aliases + if shortcuts is None: - self.shortcuts = tuple() - else: - self.shortcuts = tuple(shortcuts) + shortcuts = constants.DEFAULT_SHORTCUTS + + # Sort the shortcuts in descending order by name length because the longest match + # should take precedence. (e.g., @@file should match '@@' and not '@'. + self.shortcuts = tuple(sorted(shortcuts.items(), key=lambda x: len(x[0]), reverse=True)) # commands have to be a word, so make a regular expression # that matches the first word in the line. This regex has three |