From fcf1abdbb7a8ff321609397c6fc847ab32daa857 Mon Sep 17 00:00:00 2001 From: Daniil Kalinin Date: Fri, 17 Oct 2025 00:09:51 +0200 Subject: [PATCH] PY-84570 Do not consider bare list literal as a valid type alias (cherry picked from commit f0bcd2445735caa7917944351140a2877d0b4ffe) GitOrigin-RevId: 5f0a0bff41ee01b4e8b4f7e73c1062d523854c2c --- .../psi/impl/stubs/PyTypingAliasStubType.java | 9 +++++++++ python/testData/stubs/TypeAliasStubs.py | 3 +++ .../PyTypeHintsInspectionTest.java | 20 +++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java index 908f5f19e2ef..c4147dadf31d 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java +++ b/python/python-psi-impl/src/com/jetbrains/python/psi/impl/stubs/PyTypingAliasStubType.java @@ -183,6 +183,15 @@ public final class PyTypingAliasStubType extends CustomTargetExpressionStubType< } } + @Override + public void visitPyListLiteralExpression(@NotNull PyListLiteralExpression node) { + if (node == expression) { + illegal[0] = true; + return; + } + super.visitElement(node); + } + @Override public void visitElement(@NotNull PsiElement element) { if (element instanceof ASTDelegatePsiElement) { diff --git a/python/testData/stubs/TypeAliasStubs.py b/python/testData/stubs/TypeAliasStubs.py index acd0ee8ed995..2daddcb10f39 100644 --- a/python/testData/stubs/TypeAliasStubs.py +++ b/python/testData/stubs/TypeAliasStubs.py @@ -20,6 +20,9 @@ bin1_ok = int | str bin2_ok = int | str | bool | None bin3_ok = Union[str, bool] | None bin4_notOk = str & int +list_notOk = [int, str] + +callable_ok = Callable[[int, str], bool] explicit_alias1_ok: TypeAlias = 'Foo is bar.' explicit_alias2_ok = 'Foo is bar.' # type: TypeAlias diff --git a/python/testSrc/com/jetbrains/python/inspections/PyTypeHintsInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyTypeHintsInspectionTest.java index ac133d6545d5..06d9899459a3 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyTypeHintsInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyTypeHintsInspectionTest.java @@ -3169,6 +3169,26 @@ public class PyTypeHintsInspectionTest extends PyInspectionTestCase { } } + // PY-84570 + public void testListLiteralIsNotConsideredTypeAlias() { + doTestByText(""" + from enum import Enum + from typing import TypeAlias + + class Direction(Enum): + NORTH = "N" + SOUTH = "S" + EAST = "E" + WEST = "W" + + CARTESIAN = [Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST] + print(CARTESIAN[0]) + + type Alias = [int, str] + myAlias: TypeAlias = [int, str] + """); + } + @NotNull @Override protected Class getInspectionClass() {