From 2563746810225a55cf8664515e51845506c276ab Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 17 Jul 2016 22:36:26 +0200 Subject: [PATCH] Fix issues with octals in Python 2 (and possibly 3). Fixes #559. --- jedi/parser/tokenize.py | 5 ++++- jedi/parser/tree.py | 3 +++ test/test_parser/test_parser.py | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/jedi/parser/tokenize.py b/jedi/parser/tokenize.py index 48d0da51..233c6d87 100644 --- a/jedi/parser/tokenize.py +++ b/jedi/parser/tokenize.py @@ -52,7 +52,10 @@ name = r'\w+' hex_number = r'0[xX][0-9a-fA-F]+' bin_number = r'0[bB][01]+' -oct_number = r'0[oO][0-7]+' +if is_py3: + oct_number = r'0[oO][0-7]+' +else: + oct_number = '0[0-7]+' dec_number = r'(?:0+|[1-9][0-9]*)' int_number = group(hex_number, bin_number, oct_number, dec_number) exponent = r'[eE][-+]?[0-9]+' diff --git a/jedi/parser/tree.py b/jedi/parser/tree.py index eb746b4d..6013f36a 100644 --- a/jedi/parser/tree.py +++ b/jedi/parser/tree.py @@ -664,6 +664,9 @@ class ErrorNode(BaseNode): __slots__ = () type = 'error_node' + def nodes_to_execute(self, last_added=False): + return [] + class ErrorLeaf(LeafWithNewLines): """ diff --git a/test/test_parser/test_parser.py b/test/test_parser/test_parser.py index 741644e0..0ec75d0a 100644 --- a/test/test_parser/test_parser.py +++ b/test/test_parser/test_parser.py @@ -218,3 +218,21 @@ def test_backslash_dos_style(): def test_started_lambda_stmt(): p = ParserWithRecovery(load_grammar(), u'lambda a, b: a i') assert p.get_parsed_node().children[0].type == 'error_node' + + +def test_python2_octal(): + parser = ParserWithRecovery(load_grammar(), u'0660') + first = parser.get_parsed_node().children[0] + if is_py3: + assert first.type == 'error_node' + else: + assert first.children[0].type == 'number' + + +def test_python3_octal(): + parser = ParserWithRecovery(load_grammar(), u'0o660') + module = parser.get_parsed_node() + if is_py3: + assert module.children[0].children[0].type == 'number' + else: + assert module.children[0].type == 'error_node'