diff --git a/jedi/parser/fast.py b/jedi/parser/fast.py index 0a2e61d9..41f3a525 100644 --- a/jedi/parser/fast.py +++ b/jedi/parser/fast.py @@ -382,7 +382,7 @@ class FastParser(use_metaclass(CachedFastParser)): line_offset, nodes) last_end_line = self.current_node.parser.module.end_pos[0] - debug.dbg('While parsing %s, line %s slowed down the fast parser', + debug.dbg('While parsing %s, line %s slowed down the fast parser.', self.module_path, line_offset) line_offset = next_line_offset @@ -488,6 +488,16 @@ class FastTokenizer(object): self._closed = True return current + if value in ('def', 'class') and self._parentheses_level \ + and re.match('\n[ \t]*\Z', prefix): + # Account for the fact that an open parentheses before a function + # will reset the parentheses counter, but new lines before will + # still be ignored. So check the prefix. + + # TODO what about flow parentheses counter resets in the tokenizer? + self._parentheses_level = 0 + return self._close() + # Parentheses ignore the indentation rules. The other three stand for # new lines. if self.previous[0] in (NEWLINE, INDENT, DEDENT) \ diff --git a/test/test_parser/test_fast_parser.py b/test/test_parser/test_fast_parser.py index 88c1ad0d..7a524fab 100644 --- a/test/test_parser/test_fast_parser.py +++ b/test/test_parser/test_fast_parser.py @@ -333,7 +333,7 @@ def test_open_parentheses(): cache.save_parser(None, None, p, pickling=False) # Now with a correct parser it should work perfectly well. - check_fp('isinstance()\n' + func, 1) + check_fp('isinstance()\n' + func, 1, 2) def test_strange_parentheses():