[ty] Remove false positives when subscripting Generic or Protocol with a ParamSpec or TypeVarTuple by AlexWaygood · Pull Request #19749 · astral-sh/ruff (original) (raw)
Diagnostic diff on typing conformance tests
Changes were detected when running ty on typing conformance tests
--- old-output.txt 2025-08-04 19:39:07.502944270 +0000
+++ new-output.txt 2025-08-04 19:39:07.571944764 +0000
@@ -137,7 +137,6 @@
callables_annotation.py:57:18: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean list[int]?
callables_annotation.py:58:5: error[invalid-type-form] Special form typing.Callable expected exactly two arguments (parameter types and return type)
callables_annotation.py:58:14: error[invalid-type-form] The first argument to Callable must be either a list of types, ParamSpec, Concatenate, or ...
-callables_annotation.py:114:14: error[invalid-argument-type] ParamSpec is not a valid argument to Protocol
callables_kwargs.py:24:5: error[type-assertion-failure] Argument does not have asserted type int
callables_kwargs.py:32:9: error[type-assertion-failure] Argument does not have asserted type str
callables_kwargs.py:35:5: error[type-assertion-failure] Argument does not have asserted type str
@@ -148,12 +147,9 @@
callables_kwargs.py:65:5: error[missing-argument] No argument provided for required parameter v3 of function func2
callables_protocol.py:97:1: error[invalid-assignment] Object of type def cb4_bad1(x: int) -> None is not assignable to Proto4
callables_protocol.py:121:1: error[invalid-assignment] Object of type def cb6_bad1(*vals: bytes, *, max_len: int | None = None) -> list[bytes] is not assignable to NotProto6
-callables_protocol.py:176:14: error[invalid-argument-type] ParamSpec is not a valid argument to Protocol
callables_protocol.py:179:62: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type R@__call__
callables_subtyping.py:26:5: error[invalid-assignment] Object of type (int, /) -> int is not assignable to (int | float, /) -> int | float
callables_subtyping.py:29:5: error[invalid-assignment] Object of type (int | float, /) -> int | float is not assignable to (int, /) -> int
-callables_subtyping.py:204:21: error[invalid-argument-type] ParamSpec is not a valid argument to Protocol
-classes_classvar.py:35:14: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
classes_classvar.py:38:11: error[invalid-type-form] Type qualifier typing.ClassVar expected exactly 1 argument, got 2
classes_classvar.py:39:14: error[invalid-type-form] Int literals are not allowed in this context in a type expression
classes_classvar.py:40:14: error[unresolved-reference] Name var used when not defined
@@ -386,7 +382,6 @@
generics_defaults.py:55:1: error[type-assertion-failure] Argument does not have asserted type @Todo
generics_defaults.py:59:1: error[type-assertion-failure] Argument does not have asserted type @Todo
generics_defaults.py:63:1: error[type-assertion-failure] Argument does not have asserted type @Todo
-generics_defaults.py:76:23: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
generics_defaults.py:79:1: error[type-assertion-failure] Argument does not have asserted type @Todo
generics_defaults.py:80:1: error[type-assertion-failure] Argument does not have asserted type @Todo
generics_defaults.py:91:26: error[invalid-argument-type] @Todo is not a valid argument to Generic
@@ -417,7 +412,6 @@
generics_paramspec_semantics.py:38:28: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
generics_paramspec_semantics.py:53:34: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
generics_paramspec_semantics.py:57:34: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
-generics_paramspec_semantics.py:67:9: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
generics_paramspec_semantics.py:76:30: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type str
generics_paramspec_semantics.py:82:5: error[type-assertion-failure] Argument does not have asserted type @Todo
generics_paramspec_semantics.py:82:28: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean list[int]?
@@ -430,12 +424,9 @@
generics_paramspec_semantics.py:133:23: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
generics_paramspec_semantics.py:138:29: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
generics_paramspec_semantics.py:143:25: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type int
-generics_paramspec_specialization.py:13:14: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
-generics_paramspec_specialization.py🔞29: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
generics_paramspec_specialization.py:32:27: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean tuple[int, bool]?
generics_paramspec_specialization.py:40:27: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean tuple[()]?
generics_paramspec_specialization.py:40:31: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean tuple[()]?
-generics_paramspec_specialization.py:48:14: error[invalid-argument-type] ParamSpec is not a valid argument to Generic
generics_paramspec_specialization.py:52:22: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean tuple[int, str, bool]?
generics_scoping.py:14:1: error[type-assertion-failure] Argument does not have asserted type int
generics_scoping.py:15:1: error[type-assertion-failure] Argument does not have asserted type str
@@ -541,7 +532,6 @@
generics_typevartuple_basic.py:16:26: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type tuple[@Todo, ...]
generics_typevartuple_basic.py:23:13: error[invalid-argument-type] @Todo is not a valid argument to Generic
generics_typevartuple_basic.py:42:34: error[invalid-argument-type] Argument to bound method __init__ is incorrect: Expected tuple[@Todo, ...], found Literal[1]
-generics_typevartuple_basic.py:52:14: error[invalid-argument-type] TypeVarTuple is not a valid argument to Generic
generics_typevartuple_basic.py:65:27: error[unknown-argument] Argument covariant does not match any known parameter of function __new__
generics_typevartuple_basic.py:66:27: error[too-many-positional-arguments] Too many positional arguments to function __new__: expected 2, got 4
generics_typevartuple_basic.py:67:27: error[unknown-argument] Argument bound does not match any known parameter of function __new__
@@ -794,7 +784,6 @@
protocols_subtyping.py:16:6: error[call-non-callable] Cannot instantiate class Proto1: This call will raise TypeError at runtime
protocols_subtyping.py:38:5: error[invalid-assignment] Object of type Proto2 is not assignable to Concrete2
protocols_subtyping.py:55:5: error[invalid-assignment] Object of type Proto2 is not assignable to Proto3
-protocols_variance.py:84:16: error[invalid-argument-type] ParamSpec is not a valid argument to Protocol
protocols_variance.py:85:62: error[invalid-return-type] Function always implicitly returns None, which is not assignable to return type R@__call__
qualifiers_annotated.py:43:17: error[invalid-type-form] List literals are not allowed in this context in a type expression: Did you mean tuple[int, str]?
qualifiers_annotated.py:44:17: error[invalid-type-form] Tuple literals are not allowed in this context in a type expression
@@ -896,4 +885,4 @@
tuples_type_form.py:36:1: error[invalid-assignment] Object of type tuple[Literal[1], Literal[2], Literal[3], Literal[""]] is not assignable to tuple[int, ...]
typeddicts_operations.py:60:1: error[type-assertion-failure] Argument does not have asserted type str | None
typeddicts_type_consistency.py:101:1: error[invalid-assignment] Object of type Unknown | None is not assignable to str
-Found 897 diagnostics
+Found 886 diagnostics