forked from VimPlug/jedi
Fix an issue with end_pos of a module.
This commit is contained in:
@@ -232,10 +232,19 @@ class Parser(object):
|
|||||||
endmarker = self._parsed.children[-1]
|
endmarker = self._parsed.children[-1]
|
||||||
# The newline is either in the endmarker as a prefix or the previous
|
# The newline is either in the endmarker as a prefix or the previous
|
||||||
# leaf as a newline token.
|
# leaf as a newline token.
|
||||||
if endmarker.prefix.endswith('\n'):
|
prefix = endmarker.prefix
|
||||||
endmarker.prefix = endmarker.prefix[:-1]
|
if prefix.endswith('\n'):
|
||||||
last_line = re.sub('.*\n', '', endmarker.prefix)
|
endmarker.prefix = prefix = prefix[:-1]
|
||||||
endmarker._start_pos = endmarker._start_pos[0] - 1, len(last_line)
|
last_end = 0
|
||||||
|
if '\n' not in prefix:
|
||||||
|
# Basically if the last line doesn't end with a newline. we
|
||||||
|
# have to add the previous line's end_position.
|
||||||
|
try:
|
||||||
|
last_end = endmarker.get_previous_leaf().end_pos[1]
|
||||||
|
except IndexError:
|
||||||
|
pass
|
||||||
|
last_line = re.sub('.*\n', '', prefix)
|
||||||
|
endmarker._start_pos = endmarker._start_pos[0] - 1, last_end + len(last_line)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
newline = endmarker.get_previous_leaf()
|
newline = endmarker.get_previous_leaf()
|
||||||
@@ -251,6 +260,7 @@ class Parser(object):
|
|||||||
# will be no previous leaf. So just ignore it.
|
# will be no previous leaf. So just ignore it.
|
||||||
break
|
break
|
||||||
elif newline.value != '\n':
|
elif newline.value != '\n':
|
||||||
|
# TODO REMOVE, error recovery was simplified.
|
||||||
# This may happen if error correction strikes and removes
|
# This may happen if error correction strikes and removes
|
||||||
# a whole statement including '\n'.
|
# a whole statement including '\n'.
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -369,3 +369,11 @@ def test_different_caller():
|
|||||||
|
|
||||||
assert_signature('(str)(', 'str', 0)
|
assert_signature('(str)(', 'str', 0)
|
||||||
assert_signature('(str)()', 'str', 0, column=len('(str)('))
|
assert_signature('(str)()', 'str', 0, column=len('(str)('))
|
||||||
|
|
||||||
|
|
||||||
|
def test_in_function():
|
||||||
|
code = dedent('''\
|
||||||
|
class X():
|
||||||
|
@property
|
||||||
|
def func(''')
|
||||||
|
assert not Script(code).call_signatures()
|
||||||
|
|||||||
@@ -103,3 +103,5 @@ def test_end_newlines():
|
|||||||
test('a\n#comment', (2, 8))
|
test('a\n#comment', (2, 8))
|
||||||
test('a#comment', (1, 9))
|
test('a#comment', (1, 9))
|
||||||
test('def a():\n pass', (2, 5))
|
test('def a():\n pass', (2, 5))
|
||||||
|
|
||||||
|
test('def a(', (1, 6))
|
||||||
|
|||||||
Reference in New Issue
Block a user