mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-20 03:11:17 +08:00
Add issues for literal assignments.
This commit is contained in:
@@ -439,11 +439,31 @@ class ErrorFinder(Normalizer):
|
|||||||
|
|
||||||
def _check_assignment(self, node, is_deletion=False):
|
def _check_assignment(self, node, is_deletion=False):
|
||||||
error = None
|
error = None
|
||||||
if node.type == 'lambdef':
|
type_ = node.type
|
||||||
|
if type_ == 'lambdef':
|
||||||
error = 'lambda'
|
error = 'lambda'
|
||||||
elif node.type == 'atom':
|
elif type_ == 'atom':
|
||||||
first, second = node.children[:2]
|
first, second = node.children[:2]
|
||||||
error = _get_comprehension_type(node)
|
error = _get_comprehension_type(node)
|
||||||
|
if error is None:
|
||||||
|
if second.type in ('dictorsetmaker', 'string'):
|
||||||
|
error = 'literal'
|
||||||
|
elif first == '(':
|
||||||
|
if second.type == 'yield_expr':
|
||||||
|
error = 'yield expression'
|
||||||
|
elif type_ == 'keyword':
|
||||||
|
error = 'keyword'
|
||||||
|
elif type_ == 'operator':
|
||||||
|
if node.value == '...':
|
||||||
|
error = 'Ellipsis'
|
||||||
|
elif type_ == 'comparison':
|
||||||
|
error = 'comparison'
|
||||||
|
elif type_ in ('string', 'number'):
|
||||||
|
error = 'literal'
|
||||||
|
elif type_ == 'yield_expr':
|
||||||
|
# This one seems to be a slightly different warning in Python.
|
||||||
|
message = 'assignment to yield expression not possible'
|
||||||
|
self._add_syntax_error(message, node)
|
||||||
|
|
||||||
if error is not None:
|
if error is not None:
|
||||||
message = "can't %s %s" % ("delete" if is_deletion else "assign to", error)
|
message = "can't %s %s" % ("delete" if is_deletion else "assign to", error)
|
||||||
|
|||||||
@@ -81,9 +81,6 @@ def test_indentation_errors(code, positions):
|
|||||||
'from .__future__ import whatever',
|
'from .__future__ import whatever',
|
||||||
'def f(x=3, y): pass',
|
'def f(x=3, y): pass',
|
||||||
'lambda x=3, y: x',
|
'lambda x=3, y: x',
|
||||||
#'None = 1',
|
|
||||||
#'(True,) = x',
|
|
||||||
#'([False], a) = x',
|
|
||||||
#'__debug__ = 1'
|
#'__debug__ = 1'
|
||||||
# Mostly 3.6 relevant
|
# Mostly 3.6 relevant
|
||||||
'[]: int',
|
'[]: int',
|
||||||
@@ -108,6 +105,21 @@ def test_indentation_errors(code, positions):
|
|||||||
'{x for x in y} = 1',
|
'{x for x in y} = 1',
|
||||||
'{x:x for x in y} = 1',
|
'{x:x for x in y} = 1',
|
||||||
'(x for x in y) = 1',
|
'(x for x in y) = 1',
|
||||||
|
'None = 1',
|
||||||
|
'... = 1',
|
||||||
|
'a == b = 1',
|
||||||
|
'{a, b} = 1',
|
||||||
|
'{a: b} = 1',
|
||||||
|
'1 = 1',
|
||||||
|
'"" = 1',
|
||||||
|
'b"" = 1',
|
||||||
|
'b"" = 1',
|
||||||
|
'"" "" = 1',
|
||||||
|
'def foo(): (yield 1) = 3',
|
||||||
|
'def foo(): x = yield 1 = 3'
|
||||||
|
'',
|
||||||
|
#'(True,) = x',
|
||||||
|
#'([False], a) = x',
|
||||||
|
|
||||||
# SyntaxErrors from Python/symtable.c
|
# SyntaxErrors from Python/symtable.c
|
||||||
'def f(x, x): pass',
|
'def f(x, x): pass',
|
||||||
|
|||||||
Reference in New Issue
Block a user