diff --git a/jedi/api/helpers.py b/jedi/api/helpers.py index aad7dda6..58c7d2a2 100644 --- a/jedi/api/helpers.py +++ b/jedi/api/helpers.py @@ -53,8 +53,8 @@ def _get_code_for_stack(code_lines, module, position): leaf = leaf.get_previous_leaf() except IndexError: return u('') # At the beginning of the file. - is_after_newline = leaf.type == 'whitespace' - while leaf.type == 'whitespace': + is_after_newline = leaf.type == 'newline' + while leaf.type == 'newline': try: leaf = leaf.get_previous_leaf() except IndexError: diff --git a/jedi/evaluate/compiled/fake.py b/jedi/evaluate/compiled/fake.py index d8c8f9ab..56eb2e28 100644 --- a/jedi/evaluate/compiled/fake.py +++ b/jedi/evaluate/compiled/fake.py @@ -154,7 +154,7 @@ def get_faked(module, obj, name=None): doc = '"""%s"""' % obj.__doc__ # TODO need escapes. suite = result.children[-1] string = pt.String(pt.zero_position_modifier, doc, (0, 0), '') - new_line = pt.Whitespace('\n', (0, 0), '') + new_line = pt.Newline('\n', (0, 0), '') docstr_node = pt.Node('simple_stmt', [string, new_line]) suite.children.insert(2, docstr_node) return result diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index b13e8dcb..27293eda 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -26,8 +26,8 @@ def deep_ast_copy(obj, parent=None, new_elements=None): new_children = [] for child in obj.children: typ = child.type - if typ in ('whitespace', 'operator', 'keyword', 'number', 'string', - 'indent', 'dedent', 'error_leaf'): + if typ in ('newline', 'operator', 'keyword', 'number', 'string', + 'indent', 'dedent', 'endmarker', 'error_leaf'): # At the moment we're not actually copying those primitive # elements, because there's really no need to. The parents are # obviously wrong, but that's not an issue. diff --git a/jedi/parser/__init__.py b/jedi/parser/__init__.py index 8fb915a5..e0cbec56 100644 --- a/jedi/parser/__init__.py +++ b/jedi/parser/__init__.py @@ -214,12 +214,14 @@ class Parser(object): return pt.String(self.position_modifier, value, start_pos, prefix) elif type == NUMBER: return pt.Number(self.position_modifier, value, start_pos, prefix) - elif type in (NEWLINE, ENDMARKER): - return pt.Whitespace(self.position_modifier, value, start_pos, prefix) + elif type == NEWLINE: + return pt.Newline(self.position_modifier, value, start_pos, prefix) elif type == INDENT: return pt.Indent(self.position_modifier, value, start_pos, prefix) elif type == DEDENT: return pt.Dedent(self.position_modifier, value, start_pos, prefix) + elif type == ENDMARKER: + return pt.EndMarker(self.position_modifier, value, start_pos, prefix) else: return pt.Operator(self.position_modifier, value, start_pos, prefix) diff --git a/jedi/parser/tree.py b/jedi/parser/tree.py index 7f5a77c2..21a61804 100644 --- a/jedi/parser/tree.py +++ b/jedi/parser/tree.py @@ -147,7 +147,7 @@ class Base(object): return scope def get_definition(self): - if self.type in ('whitespace', 'dedent', 'indent'): + if self.type in ('newline', 'dedent', 'indent', 'endmarker'): raise ValueError('Cannot get the indentation of whitespace or indentation.') scope = self while scope.parent is not None: @@ -354,10 +354,15 @@ class LeafWithNewLines(Leaf): return "<%s: %r>" % (type(self).__name__, self.value) -class Whitespace(LeafWithNewLines): +class EndMarker(Leaf): + __slots__ = () + type = 'endmarker' + + +class Newline(LeafWithNewLines): """Contains NEWLINE and ENDMARKER tokens.""" __slots__ = () - type = 'whitespace' + type = 'newline' @utf8_repr def __repr__(self):