diff --git a/parso/python/normalizer.py b/parso/python/normalizer.py index 794a37d..5b84009 100644 --- a/parso/python/normalizer.py +++ b/parso/python/normalizer.py @@ -48,7 +48,12 @@ class ErrorFinder(Normalizer): def visit_node(self, node): if node.type == 'error_node': leaf = node.get_next_leaf() - self._add_syntax_error("invalid syntax", leaf) + if node.children[-1].type == 'newline': + # This is the beginning of a suite that is not indented. + spacing = list(leaf._split_prefix())[-1] + self._add_indentation_error('expected an indented block', spacing) + else: + self._add_syntax_error("invalid syntax", leaf) elif node.type in _BLOCK_STMTS: with self._context.add_block(node): if len(self._context.blocks) == _MAX_BLOCK_SIZE: diff --git a/test/normalizer_issue_files/E27.py b/test/normalizer_issue_files/E27.py index 0c328e3..9149f0a 100644 --- a/test/normalizer_issue_files/E27.py +++ b/test/normalizer_issue_files/E27.py @@ -22,7 +22,7 @@ True and False if 1: pass # Syntax Error, no indentation -#: E901+1 +#: E903+1 if 1: pass #: E223:8 diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 7a5620d..5dd2d66 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -48,6 +48,7 @@ def test_syntax_errors(code, positions): (' 1', [(1, 0)]), ('def x():\n 1\n 2', [(3, 0)]), ('def x():\n 1\n 2', [(3, 0)]), + ('def x():\n1', [(2, 0)]), ] ) def test_indentation_errors(code, positions): @@ -63,6 +64,7 @@ def test_indentation_errors(code, positions): ' foo', 'def x():\n 1\n 2', 'def x():\n 1\n 2', + 'if 1:\nfoo', ] ) def test_python_exception_matches(code):