[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