summaryrefslogtreecommitdiff
path: root/cmd2/parsing.py
diff options
context:
space:
mode:
authorkotfu <kotfu@kotfu.net>2019-07-16 17:30:23 -0600
committerkotfu <kotfu@kotfu.net>2019-07-16 17:30:23 -0600
commitf3ae3e129c9205229922463fc5ef57cc413c0ab9 (patch)
treebfe8b7eec20592de74725e5298dec68799f7ebec /cmd2/parsing.py
parenta8c4a65106ad6325adec5e662ee8a5397527dba5 (diff)
parentf77abb09888c6ea3f6d8dadb28de46c36f035459 (diff)
downloadcmd2-git-f3ae3e129c9205229922463fc5ef57cc413c0ab9.tar.gz
Merge branch 'master' into integrate_legacy_documentation
# Conflicts: # docs/features/history.rst
Diffstat (limited to 'cmd2/parsing.py')
-rw-r--r--cmd2/parsing.py13
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