[python] Consider @typing.dataclass_transform not affecting the decorated definition

Otherwise, we think that after being decorated, such functions turn from callables into None.


IJ-MR-160807

GitOrigin-RevId: dea4959c7562b48286d1017ca77fc867c6123600
This commit is contained in:
Mikhail Golubev
2025-05-05 17:56:49 +03:00
committed by intellij-monorepo-bot
parent 639ca7673b
commit ad39be4f1a
3 changed files with 15 additions and 0 deletions

View File

@@ -131,6 +131,8 @@ public class PyKnownDecorator {
public final static PyKnownDecorator TYPING_DEPRECATED = new PyKnownDecorator("typing_extensions.deprecated");
public final static PyKnownDecorator TYPING_NO_TYPE_CHECK = new PyKnownDecorator("typing.no_type_check");
public final static PyKnownDecorator TYPING_NO_TYPE_CHECK_EXT = new PyKnownDecorator("typing_extensions.no_type_check");
public final static PyKnownDecorator TYPING_DATACLASS_TRANSFORM = new PyKnownDecorator("typing.dataclass_transform");
public final static PyKnownDecorator TYPING_DATACLASS_TRANSFORM_EXT = new PyKnownDecorator("typing_extensions.dataclass_transform");
public final static PyKnownDecorator WARNING_DEPRECATED = new PyKnownDecorator("warnings.deprecated");

View File

@@ -35,6 +35,8 @@ class PyStdKnownDecoratorProvider : PyKnownDecoratorProvider {
PyKnownDecorator.TYPING_DEPRECATED,
PyKnownDecorator.TYPING_NO_TYPE_CHECK,
PyKnownDecorator.TYPING_NO_TYPE_CHECK_EXT,
PyKnownDecorator.TYPING_DATACLASS_TRANSFORM,
PyKnownDecorator.TYPING_DATACLASS_TRANSFORM_EXT,
PyKnownDecorator.WARNING_DEPRECATED,
PyKnownDecorator.REPRLIB_RECURSIVE_REPR,
PyKnownDecorator.PYRAMID_DECORATOR_REIFY,

View File

@@ -5937,6 +5937,17 @@ public class PyTypingTest extends PyTestCase {
""");
}
public void testDataclassTransformDecoratedFunctionType() {
doTest("(cls: Any) -> None","""
from typing import dataclass_transform
@dataclass_transform()
def my_dataclass(cls): ...
expr = my_dataclass
""");
}
// PY-76076
public void testGenericAliasUnderVersionGuard() {
doMultiFileStubAwareTest("list[str]", """