diff --git a/parso/python/normalizer.py b/parso/python/normalizer.py index 09f6416..8e330a4 100644 --- a/parso/python/normalizer.py +++ b/parso/python/normalizer.py @@ -97,6 +97,7 @@ class Context(object): self.node = node self.blocks = [] self.parent_context = parent_context + self.used_names = dict() def is_async_funcdef(self): # Stupidly enough async funcdefs can have two different forms, @@ -387,6 +388,10 @@ class ErrorFinder(Normalizer): self._add_indentation_error(message, spacing) else: self._add_syntax_error('invalid syntax', leaf) + elif leaf.type == 'name': + if leaf.value == '__debug__' and leaf.is_definition(): + message = 'assignment to keyword' + self._add_syntax_error(message, leaf) elif leaf.type == 'string': if 'b' in leaf.string_prefix.lower() \ and any(c for c in leaf.value if ord(c) > 127): diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 943d55b..a1e27bd 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -81,7 +81,8 @@ def test_indentation_errors(code, positions): 'from .__future__ import whatever', 'def f(x=3, y): pass', 'lambda x=3, y: x', - #'__debug__ = 1' + '__debug__ = 1', + 'with x() as __debug__: pass', # Mostly 3.6 relevant '[]: int', '[a, b]: int',