diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2017-05-21 17:07:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-21 17:07:36 -0700 |
commit | b513c16d61bbded9cdab06238f8fcb1c03963217 (patch) | |
tree | 0d8e7238843a55d5fc35190d317000fcacef50a2 | |
parent | 8297145a74ee4d239cfb7d68a47f59342fd831fe (diff) | |
parent | a57c664511a42eeeafa530d185f5ff89c6060496 (diff) | |
download | cmd2-git-b513c16d61bbded9cdab06238f8fcb1c03963217.tar.gz |
Merge pull request #103 from python-cmd2/multiline_abbreviations0.7.1
Multiline abbreviations
-rw-r--r-- | CHANGES.md | 1 | ||||
-rwxr-xr-x | cmd2.py | 4 | ||||
-rw-r--r-- | docs/freefeatures.rst | 5 | ||||
-rw-r--r-- | tests/test_parsing.py | 8 |
4 files changed, 15 insertions, 3 deletions
@@ -23,6 +23,7 @@ News * Added CmdResult namedtumple for returning and storing results * Added local file system path completion for ``edit``, ``load``, ``save``, and ``shell`` commands * Add shell command completion for ``shell`` command or ``!`` shortcut +* Abbreviated multiline commands are no longer allowed (they never worked correctly anyways) 0.7.0 ----- @@ -600,7 +600,7 @@ class Cmd(cmd.Cmd): excludeFromHistory = '''run r list l history hi ed edit li eof'''.split() # make sure your terminators are not in legalChars! legalChars = u'!#$%.:?@_-' + pyparsing.alphanums + pyparsing.alphas8bit - multilineCommands = [] + multilineCommands = [] # NOTE: Multiline commands can never be abbreviated, even if abbrev is True noSpecialParse = 'set ed edit exit'.split() prefixParser = pyparsing.Empty() redirector = '>' # for sending output to file @@ -1089,7 +1089,7 @@ class Cmd(cmd.Cmd): result = target else: if self.abbrev: # accept shortened versions of commands - funcs = [fname for fname in self.keywords if fname.startswith(arg)] + funcs = [func for func in self.keywords if func.startswith(arg) and func not in self.multilineCommands] if len(funcs) == 1: result = 'do_' + funcs[0] return result diff --git a/docs/freefeatures.rst b/docs/freefeatures.rst index 44ade408..3c740c00 100644 --- a/docs/freefeatures.rst +++ b/docs/freefeatures.rst @@ -243,6 +243,11 @@ no other commands defined beginning with *divid*, This behavior can be turned off with ``app.abbrev`` (see :ref:`parameters`) +.. warning:: + + Due to the way the parsing logic works for multiline commands, abbreviations + will not be accepted for multiline commands. + Misc. pre-defined commands ========================== diff --git a/tests/test_parsing.py b/tests/test_parsing.py index d6b64093..171f33a5 100644 --- a/tests/test_parsing.py +++ b/tests/test_parsing.py @@ -2,7 +2,7 @@ """ Unit/functional testing for helper functions/classes in the cmd2.py module. -These are primarily tests related to parsing. Moreover, they are mostly a port of the old doctest tests which were +These are primarily tests related to parsing. Moreover, they are mostly a port of the old doctest tests which were problematic because they worked properly for some versions of pyparsing but not for others. Copyright 2017 Todd Leonhardt <todd.leonhardt@gmail.com> @@ -247,6 +247,12 @@ def test_parse_multiline_ignores_terminators_in_comments(parser): assert results.terminator[0] == '\n' assert results.terminator[1] == '\n' +def test_parse_abbreviated_multiline_not_allowed(parser): + line = 'multilin command\n' + results = parser.parseString(line) + assert results.command == 'multilin' + assert results.multilineCommand == '' + # Unicode support is only present in cmd2 for Python 3 @pytest.mark.skipif(sys.version_info < (3,0), reason="cmd2 unicode support requires python3") def test_parse_command_with_unicode_args(parser): |