mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-09 06:04:54 +08:00
Better matching syntax errors.
This commit is contained in:
@@ -48,7 +48,7 @@ class ErrorFinder(Normalizer):
|
|||||||
def visit_node(self, node):
|
def visit_node(self, node):
|
||||||
if node.type == 'error_node':
|
if node.type == 'error_node':
|
||||||
leaf = node.get_next_leaf()
|
leaf = node.get_next_leaf()
|
||||||
self._add_syntax_error("Syntax Error", leaf)
|
self._add_syntax_error("invalid syntax", leaf)
|
||||||
elif node.type in _BLOCK_STMTS:
|
elif node.type in _BLOCK_STMTS:
|
||||||
with self._context.add_block(node):
|
with self._context.add_block(node):
|
||||||
yield
|
yield
|
||||||
@@ -77,17 +77,17 @@ class ErrorFinder(Normalizer):
|
|||||||
message = 'unexpected indent'
|
message = 'unexpected indent'
|
||||||
else:
|
else:
|
||||||
message = 'unindent does not match any outer indentation level'
|
message = 'unindent does not match any outer indentation level'
|
||||||
self._add_indentation_error("IndentationError: " + message, spacing)
|
self._add_indentation_error(message, spacing)
|
||||||
else:
|
else:
|
||||||
self._add_syntax_error("Syntax Error", leaf)
|
self._add_syntax_error('invalid syntax', leaf)
|
||||||
|
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def _add_indentation_error(self, message, spacing):
|
def _add_indentation_error(self, message, spacing):
|
||||||
self._add_error(903, message, spacing)
|
self._add_error(903, "IndentationError: " + message, spacing)
|
||||||
|
|
||||||
def _add_syntax_error(self, message, node):
|
def _add_syntax_error(self, message, node):
|
||||||
self._add_error(901, message, node)
|
self._add_error(901, "SyntaxError: " + message, node)
|
||||||
|
|
||||||
def _add_error(self, code, message, node):
|
def _add_error(self, code, message, node):
|
||||||
# Check if the issues are on the same line.
|
# Check if the issues are on the same line.
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ def test_indentation_errors(code, positions):
|
|||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'code', [
|
'code', [
|
||||||
|
# SyntaxError
|
||||||
|
'1 +',
|
||||||
|
# IndentationError
|
||||||
' foo',
|
' foo',
|
||||||
'def x():\n 1\n 2',
|
'def x():\n 1\n 2',
|
||||||
'def x():\n 1\n 2',
|
'def x():\n 1\n 2',
|
||||||
|
|||||||
Reference in New Issue
Block a user