forked from VimPlug/jedi
Fix issues with the new newline end_pos positions.
This commit is contained in:
@@ -273,6 +273,10 @@ class ParserNode(object):
|
|||||||
for y in n.all_sub_nodes():
|
for y in n.all_sub_nodes():
|
||||||
yield y
|
yield y
|
||||||
|
|
||||||
|
@cache.underscore_memoization # Should only happen once!
|
||||||
|
def remove_last_newline(self):
|
||||||
|
self.parser.remove_last_newline()
|
||||||
|
|
||||||
|
|
||||||
class FastParser(use_metaclass(CachedFastParser)):
|
class FastParser(use_metaclass(CachedFastParser)):
|
||||||
|
|
||||||
@@ -383,6 +387,10 @@ class FastParser(use_metaclass(CachedFastParser)):
|
|||||||
self.current_node.reset_node()
|
self.current_node.reset_node()
|
||||||
|
|
||||||
for code_part in self._split_parts(source):
|
for code_part in self._split_parts(source):
|
||||||
|
if not is_first:
|
||||||
|
print('OFF', line_offset + 2,
|
||||||
|
self.current_node.parser.module.end_pos[0])
|
||||||
|
#import pdb; pdb.set_trace()
|
||||||
if is_first or line_offset + 1 == self.current_node.parser.module.end_pos[0]:
|
if is_first or line_offset + 1 == self.current_node.parser.module.end_pos[0]:
|
||||||
print(repr(code_part))
|
print(repr(code_part))
|
||||||
|
|
||||||
@@ -430,7 +438,7 @@ class FastParser(use_metaclass(CachedFastParser)):
|
|||||||
start += len(code_part) + 1 # +1 for newline
|
start += len(code_part) + 1 # +1 for newline
|
||||||
|
|
||||||
if added_newline:
|
if added_newline:
|
||||||
self.current_node.parser.remove_last_newline()
|
self.current_node.remove_last_newline()
|
||||||
|
|
||||||
# Now that the for loop is finished, we still want to close all nodes.
|
# Now that the for loop is finished, we still want to close all nodes.
|
||||||
self.current_node = self.current_node.parent_until_indent()
|
self.current_node = self.current_node.parent_until_indent()
|
||||||
@@ -471,11 +479,10 @@ class FastParser(use_metaclass(CachedFastParser)):
|
|||||||
|
|
||||||
end = p.module.end_pos[0]
|
end = p.module.end_pos[0]
|
||||||
print('\nACTUALLY PARSING', p.module.end_pos, repr(source), len(self._lines))
|
print('\nACTUALLY PARSING', p.module.end_pos, repr(source), len(self._lines))
|
||||||
if not (len(self._lines) == end and p.module.end_pos[1] > 0):
|
if not (len(self._lines) == end):
|
||||||
# The actual used code_part is different from the given code
|
# We don't keep the last line, except if were done. A newline
|
||||||
# part, because of docstrings for example there's a chance that
|
# ends on the next line, which is part of the next parser. But
|
||||||
# splits are wrong. Somehow it's different for the end
|
# the last parser includes the last new line.
|
||||||
# position.
|
|
||||||
end -= 1
|
end -= 1
|
||||||
used_lines = self._lines[line_offset:end]
|
used_lines = self._lines[line_offset:end]
|
||||||
code_part_actually_used = '\n'.join(used_lines)
|
code_part_actually_used = '\n'.join(used_lines)
|
||||||
|
|||||||
Reference in New Issue
Block a user