Fix an issue in the diff parser

Forgot to check for functions/classes that were part of a decorator/async func.

Fixes https://github.com/davidhalter/jedi/issues/1132
This commit is contained in:
Dave Halter
2018-07-06 01:24:38 +02:00
parent 0daf4d9068
commit 52e3db4834
2 changed files with 22 additions and 1 deletions

View File

@@ -570,7 +570,9 @@ class _NodesStack(object):
self._tos = _NodesStackNode(tree_node, self._tos)
self._tos.add(list(tree_node.children))
self._update_tos(tree_node.children[-1])
elif tree_node.type in ('classdef', 'funcdef'):
elif tree_node.type in ('decorated', 'classdef', 'funcdef',
'async_funcdef') \
or tree_node.type == 'async_stmt' and tree_node.children[0].type == 'funcdef':
self._update_tos(tree_node.children[-1])
def close(self):

View File

@@ -507,3 +507,22 @@ def test_endmarker_newline(differ):
def test_newlines_at_end(differ):
differ.initialize('a\n\n')
differ.parse('a\n', copies=1)
def test_end_newline_with_decorator(differ):
code = dedent('''\
@staticmethod
def spam():
import json
json.l''')
differ.initialize(code)
module = differ.parse(code + '\n', copies=0)
decorated, endmarker = module.children
assert decorated.type == 'decorated'
decorator, func = decorated.children
suite = func.children[-1]
assert suite.type == 'suite'
newline, first_stmt, second_stmt = suite.children
assert first_stmt.get_code() == ' import json\n'
assert second_stmt.get_code() == ' json.l\n'