diff --git a/mypy/semanal.py b/mypy/semanal.py index a9dbc8a2dd20..f30709fa03a7 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -1842,7 +1842,7 @@ def push_type_args( return None tvs.append((p.name, tv)) - if self.is_defined_type_param(p.name): + if self.get_defined_type_param(p.name): self.fail(f'"{p.name}" already defined as a type parameter', context) else: assert self.add_symbol( @@ -1851,15 +1851,15 @@ def push_type_args( return tvs - def is_defined_type_param(self, name: str) -> bool: + def get_defined_type_param(self, name: str) -> TypeVarLikeExpr | None: for names in self.locals: if names is None: continue if name in names: node = names[name].node if isinstance(node, TypeVarLikeExpr): - return True - return False + return node + return None def analyze_type_param( self, type_param: TypeParam, context: Context @@ -2272,15 +2272,15 @@ class Foo(Bar, Generic[T]): ... has_type_var_tuple = False if defn.type_args is not None: for p in defn.type_args: - node = self.lookup(p.name, context) + node = self.get_defined_type_param(p.name) assert node is not None - assert isinstance(node.node, TypeVarLikeExpr) - if isinstance(node.node, TypeVarTupleExpr): + assert isinstance(node, TypeVarLikeExpr) + if isinstance(node, TypeVarTupleExpr): if has_type_var_tuple: self.fail("Can only use one type var tuple in a class def", context) continue has_type_var_tuple = True - declared_tvars.append((p.name, node.node)) + declared_tvars.append((p.name, node)) for i, base_expr in enumerate(base_type_exprs): if isinstance(base_expr, StarExpr): diff --git a/test-data/unit/check-python312.test b/test-data/unit/check-python312.test index a67ed4abcffa..849f6c3c0b52 100644 --- a/test-data/unit/check-python312.test +++ b/test-data/unit/check-python312.test @@ -2237,3 +2237,10 @@ class D[*Ts](Generic[Unpack[Us]]): # E: Generic[...] base class is redundant \ # E: Can only use one type var tuple in a class def pass [builtins fixtures/tuple.pyi] + +[case testPEP695TypeVarReusedName] +class C: + X = 5 + class Inner[X]: + pass +[builtins fixtures/tuple.pyi]