diff --git a/mypy/semanal.py b/mypy/semanal.py index 9a7ef1f6282a..8771fb768d80 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -1309,10 +1309,11 @@ def analyze_lvalue(self, lval: Lvalue, nested: bool = False, lval.kind = MDEF lval.fullname = lval.name self.type.names[lval.name] = SymbolTableNode(MDEF, v) + elif explicit_type: + # Don't re-bind types + self.name_already_defined(lval.name, lval) else: # Bind to an existing name. - if explicit_type: - self.name_already_defined(lval.name, lval) lval.accept(self) self.check_lvalue_validity(lval.node, lval) elif isinstance(lval, MemberExpr): diff --git a/test-data/unit/semanal-errors.test b/test-data/unit/semanal-errors.test index cc222d9799b7..06fd3d0dd226 100644 --- a/test-data/unit/semanal-errors.test +++ b/test-data/unit/semanal-errors.test @@ -1311,3 +1311,13 @@ class A: [out] main:5: error: Name 'x' is not defined main:5: error: Name 'y' is not defined + +[case testTypeRedeclarationNoSpuriousWarnings] +from typing import Tuple +a = 1 # type: int +a = 's' # type: str +a = ('spam', 'spam', 'eggs', 'spam') # type: Tuple[str] + +[out] +main:3: error: Name 'a' already defined +main:4: error: Name 'a' already defined