From 8356bcab100df1c95d02cb49a2e4bbe55a150143 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 30 May 2017 09:35:13 +0200 Subject: [PATCH] Fix small issues in prefix positioning. --- parso/python/prefix.py | 6 +++--- parso/python/tree.py | 2 +- test/test_prefix.py | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/parso/python/prefix.py b/parso/python/prefix.py index 38547e1..6ba3eb6 100644 --- a/parso/python/prefix.py +++ b/parso/python/prefix.py @@ -11,9 +11,9 @@ class PrefixToken(object): @property def end_pos(self): - if '\n' in self.value: + if self.value.endswith('\n'): return self.start_pos[0] + 1, 0 - return self.end_pos[1] + return self.start_pos[0], self.start_pos[1] + len(self.value) _comment = r'#[^\n\r\f]*' @@ -46,6 +46,6 @@ def split_prefix(prefix, start_pos): yield PrefixToken(typ, value, (line, column + start)) start = match.end(0) - if '\n' in value: + if value.endswith('\n'): line += 1 column = -start diff --git a/parso/python/tree.py b/parso/python/tree.py index 9d6fa50..9c87774 100644 --- a/parso/python/tree.py +++ b/parso/python/tree.py @@ -101,7 +101,7 @@ class PythonLeaf(PythonMixin, Leaf): __slots__ = () def _split_prefix(self): - return split_prefix(self.prefix, self.start_pos) + return split_prefix(self.prefix, self.get_start_pos_of_prefix()) class _LeafWithoutNewlines(PythonLeaf): diff --git a/test/test_prefix.py b/test/test_prefix.py index f0e040a..95eea4b 100644 --- a/test/test_prefix.py +++ b/test/test_prefix.py @@ -20,8 +20,21 @@ def test_simple_prefix_splitting(string, tokens): tree = parso.parse(string) leaf = tree.children[0] assert leaf.type == 'endmarker' + parsed_tokens = list(leaf._split_prefix()) - assert [t.value for t in parsed_tokens] == tokens + start_pos = (1, 0) + for pt, expected in zip(parsed_tokens, tokens): + assert pt.value == expected + + # Calculate the estimated end_pos + if expected.endswith('\n'): + end_pos = start_pos[0] + 1, 0 + else: + end_pos = start_pos[0], start_pos[1] + len(expected) + + #assert start_pos == pt.start_pos + assert end_pos == pt.end_pos + start_pos = end_pos @pytest.mark.parametrize(('string', 'types'), [