diff --git a/conformance/README.md b/conformance/README.md index e0302c80..d43fcfef 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -80,7 +80,7 @@ Note that some type checkers may not run on some platforms. If a type checker fa Different type checkers report errors in different ways (with different wording in error messages and different line numbers or character ranges for errors). This variation makes it difficult to fully automate test validation given that tests will want to check for both false positive and false negative type errors. Some level of manual inspection will therefore be needed to determine whether a type checker is fully conformant with all tests in any given test file. This "scoring" process is required only when the output of a test changes — e.g. when a new version of that type checker is released and the tests are rerun. We assume that the output of a type checker will be the same from one run to the next unless/until a new version is released that fixes or introduces a bug. In this case, the output will need to be manually inspected and the conformance results re-scored for those tests whose output has changed. -Conformance results are reported and summarized for each supported type checker. Currently, results are reported for mypy, pyrefly, pyright, and zuban. It is the goal and desire to add additional type checkers over time. +Conformance results are reported and summarized for each supported type checker. Currently, results are reported for mypy, pyrefly, pyright, zuban and ty. It is the goal and desire to add additional type checkers over time. ## Adding a New Test Case diff --git a/conformance/requirements.txt b/conformance/requirements.txt index eac56a05..705af6b0 100644 --- a/conformance/requirements.txt +++ b/conformance/requirements.txt @@ -5,3 +5,4 @@ mypy pip zuban pyrefly +ty diff --git a/conformance/results/mypy/version.toml b/conformance/results/mypy/version.toml index e0afe12c..6356188e 100644 --- a/conformance/results/mypy/version.toml +++ b/conformance/results/mypy/version.toml @@ -1 +1 @@ -version = "mypy 1.19.0" +version = "mypy 1.19.1" diff --git a/conformance/results/pyrefly/protocols_explicit.toml b/conformance/results/pyrefly/protocols_explicit.toml index 3986491f..e415ed26 100644 --- a/conformance/results/pyrefly/protocols_explicit.toml +++ b/conformance/results/pyrefly/protocols_explicit.toml @@ -3,14 +3,14 @@ notes = """ Does not reject call to super method with no default implementation. Does not detect stub methods inherited from protocols as abstract. """ -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 89: Expected 1 errors """ output = """ ERROR protocols_explicit.py:27:16-28: Method `draw` inherited from class `PColor` has no implementation and cannot be accessed via `super()` [missing-attribute] ERROR protocols_explicit.py:56:20-36: `tuple[int, int, str]` is not assignable to attribute `rgb` with type `tuple[int, int, int]` [bad-assignment] ERROR protocols_explicit.py:60:10-20: Cannot instantiate `Point` because the following members are abstract: `intensity`, `transparency` [bad-instantiation] +ERROR protocols_explicit.py:89:15-17: Cannot instantiate `Concrete1` because the following members are abstract: `cm1` [bad-instantiation] ERROR protocols_explicit.py:134:15-17: Cannot instantiate `Concrete5` because the following members are abstract: `method1` [bad-instantiation] ERROR protocols_explicit.py:164:17-19: Cannot instantiate `Concrete7A` because the following members are abstract: `method1` [bad-instantiation] """ diff --git a/conformance/results/pyrefly/version.toml b/conformance/results/pyrefly/version.toml index 4dfd1faa..c10f8526 100644 --- a/conformance/results/pyrefly/version.toml +++ b/conformance/results/pyrefly/version.toml @@ -1 +1 @@ -version = "pyrefly 0.45.2" +version = "pyrefly 0.46.0" diff --git a/conformance/results/results.html b/conformance/results/results.html index ec5fb551..d909f913 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -158,16 +158,18 @@
| - | mypy 1.19.0
+ | mypy 1.19.1
|
pyright 1.1.407
|
zuban 0.3.0
|
-pyrefly 0.45.2
+ | pyrefly 0.46.0
+ |
+ty 0.0.2 (42835578d 2025-12-16)
|
|---|---|---|---|---|---|---|---|
| + | |||||||
| Type annotations | |||||||
| annotations_coroutines | @@ -175,32 +177,37 @@Pass | Pass | Pass | +Pass | |||
| annotations_forward_refs | Partial Does not report error for a forward reference that is not enclosed in quotes. Does not report error for use of quoted type with "|" operator (runtime error). Incorrectly generates error for quoted type defined in class scope. |
Pass | Partial Does not report error for a forward reference that is not enclosed in quotes. Incorrectly generates error for quoted type defined in class scope. Does not ignore newlines in multi-line unions |
Partial Types in quotes incorrectly refer to shadowing class member. Does not reject some type forms that require quotes. |
+Unknown | ||
| annotations_generators | Partial Does not report incompatible Generator type in `yield from` statement. |
Pass | Pass | Partial Does not detect that invalid yield is unreachable |
+Unknown | ||
| annotations_methods | Pass* Type evaluation differs from other type checkers because of ambiguity in the spec related to method bindings. |
Pass* Type evaluation differs from other type checkers because of ambiguity in the spec related to method bindings. |
Pass | Pass | +Pass | ||
| annotations_typeexpr | Pass | Pass | Pass | Pass | +Pass | ||
| + | |||||||
| Special types in annotations | |||||||
| specialtypes_any | @@ -208,32 +215,37 @@Pass | Pass | Pass | +Unknown | |||
| specialtypes_never | Pass | Pass | Pass | Partial Does not detect invalid return is unreachable |
+Unknown | ||
| specialtypes_none | Pass | Pass | Pass | Pass | +Unknown | ||
| specialtypes_promotions | Pass | Pass | Pass | Pass | +Pass | ||
| specialtypes_type | Partial Does not treat `type` same as `type[Any]` for assert_type. Does not allow access to unknown attributes from object of type `type[Any]`. |
Pass | Pass | Partial Does not implement all typing rules for type/type[] |
+Unknown | ||
| + | |||||||
| Generics | |||||||
| generics_base_class | @@ -241,182 +253,212 @@Pass | Partial Does not detect inconsistent type variable ordering in multi-inheritance. |
Partial Does not reject inconsistent ordering of type variables in different base classes. |
+Unknown | |||
| generics_basic | Pass | Pass | Pass | Partial Incorrect rejects + between two AnyStr Constrained type var resolves to subtype instead of explcitly listed constraint |
+Unknown | ||
| generics_defaults | Partial | Pass | Partial Does not reject TypeVars with defaults after a TypeVarTuple Type parameter defaults are not bound by attribute access ParamSpec after TypeVarTuple is not always handled correctly |
Partial Defaults are not bound by attribute access |
+Unknown | ||
| generics_defaults_referential | Partial | Pass | Pass | Unsupported | +Unknown | ||
| generics_defaults_specialization | Partial | Pass | Pass | Pass | +Unknown | ||
| generics_paramspec_basic | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_paramspec_components | Pass | Pass | Pass | Partial Does not reject usage of args/kwargs for out-of-scope ParamSpec |
+Unknown | ||
| generics_paramspec_semantics | Pass | Pass* Constraint solver doesn't find common type for two signatures captured by a single ParamSpec (allowed). |
Pass | Pass | +Unknown | ||
| generics_paramspec_specialization | Pass | Pass | Pass | Pass | +Pass | ||
| generics_scoping | Pass | Pass | Partial False negative on generic class nested within generic class with same type variable. |
Partial Does not implement several scoping checks/restrictions for generics |
+Unknown | ||
| generics_self_advanced | Partial Does not infer the type of an unannotated `self` parameter to be type `Self`. Does not retain `Self` when calling method that returns `Self`. Does not infer the type of an unannotated `cls` parameter to be type `type[Self]`. Does not retain `Self` when accessing attribute through `type[Self]`. |
Pass | Partial Doesn't allow accessing `Self` in a classmethod |
Pass* Treats attributes not initialized on the class as instance-only |
+Unknown | ||
| generics_self_attributes | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_self_basic | Pass | Pass | Pass | Partial Return annotation of Self allows returning the concrete instance of the current class. |
+Pass | ||
| generics_self_protocols | Pass | Pass | Pass | Pass | +Pass | ||
| generics_self_usage | Pass | Pass | Partial Does not detect invalid Self when Self is not properly bound |
Partial Does not implement some restrictions on where Self can be used |
+Unknown | ||
| generics_syntax_compatibility | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_syntax_declarations | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_syntax_infer_variance | Unsupported Type parameter syntax not yet support. |
Pass | Partial Final is handled a bit different (questionable if this is an issue) |
Pass | +Unknown | ||
| generics_syntax_scoping | Partial Does not following runtime scoping rules for type parameters in all cases. |
Pass | Partial Does not following runtime scoping rules for type parameters in all cases. |
Pass | +Unknown | ||
| generics_type_erasure | Partial Infers Node[Never] instead of Node[Any] when argument is not provided. False negative on instance attribute access on type(node). |
Pass | Partial Infers Node[Never] instead of Node[Any] when argument is not provided. |
Pass | +Unknown | ||
| generics_typevartuple_args | Partial Does not enforce that tuples captured by TypeVarTuple are same type. |
Pass | Partial Does not enforce that tuples captured by TypeVarTuple are same type. |
Pass | +Unknown | ||
| generics_typevartuple_basic | Partial Does not enforce that tuples captured by TypeVarTuple are same length. Does not enforce that tuples captured by TypeVarTuple are same type. |
Pass | Partial Does not enforce that tuples captured by TypeVarTuple are same length. Does not enforce that tuples captured by TypeVarTuple are same type. |
Partial TypeVarTuple is pinned too early when calling generic function |
+Unknown | ||
| generics_typevartuple_callable | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_typevartuple_concat | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_typevartuple_overloads | Pass | Pass | Pass | Pass | +Pass | ||
| generics_typevartuple_specialization | Partial Incorrectly specializes generic alias that includes a TypeVar and TypeVarTuple if no type arguments are provided. Rejects specialization of generic type alias defined as a tuple containing a TypeVar. |
Pass | Pass | Partial Sometimes specializes to tuple[Any, ...] instead of empty tuple |
+Unknown | ||
| generics_typevartuple_unpack | Pass | Pass | Pass | Pass | +Unknown | ||
| generics_upper_bound | Partial Does not reject use of type variable within an upper bound. |
Pass | Partial Does not reject use of type variable within an upper bound. |
Pass | +Unknown | ||
| generics_variance | Partial Does not reject use of class-scoped TypeVar used in a base class when variance is incompatible. |
Pass | Partial Does not reject use of class-scoped TypeVar used in a base class when variance is incompatible. |
Unsupported | +Unknown | ||
| generics_variance_inference | Pass | Pass | Pass | Pass | +Pass | ||
| + | |||||||
| Type qualifiers | |||||||
| qualifiers_annotated | @@ -424,20 +466,23 @@Pass | Pass | Partial Allows Annotated in some contexts where it should not be allowed |
+Pass | |||
| qualifiers_final_annotation | Partial Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition. Does not allow conditional assignment of Final instance variable in __init__ method. Does not allow redefinition of private class variable that is marked Final in parent class. Does not report modification of local Final variable via "for" statement. |
Pass | Partial Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition. Does not allow conditional assignment of Final instance variable in __init__ method. |
Partial Final attributes not initialized on the class can be assigned to |
+Unknown | ||
| qualifiers_final_decorator | Pass | Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Class type compatibility | |||||||
| classes_classvar | @@ -445,14 +490,16 @@Pass | Pass | Pass | +Unknown | |||
| classes_override | Pass | Pass | Pass | Pass | +Pass | ||
| + | |||||||
| Type aliases | |||||||
| aliases_explicit | @@ -460,44 +507,51 @@Pass | Pass | Pass | +Unknown | |||
| aliases_implicit | Pass | Pass | Pass | Partial Does not reject invalid syntax in implicit type aliases. |
+Unknown | ||
| aliases_newtype | Partial `NewType`s are incorrectly considered to be classes. |
Pass | Pass | Pass | +Unknown | ||
| aliases_recursive | Pass | Pass | Pass | Unsupported | +Unknown | ||
| aliases_type_statement | Partial Does not reject type alias defined in function scope. |
Pass | Pass | Partial Does not reject redeclaration of type alias with the same name. Does not detect circular definitions. |
+Unknown | ||
| aliases_typealiastype | Partial Incorrectly rejects some recursive type aliases using TypeAliasType. Incorrectly rejects the use of a class-scoped TypeVar in a TypeAliasType definition. |
Pass | Partial Incorrectly rejects the use of a class-scoped TypeVar in a TypeAliasType definition. Incorrectly allows type_params= to be an arbitrary tuple. |
Partial Does not detect circular definitions. |
+Unknown | ||
| aliases_variance | Pass | Pass | Pass | Unsupported | +Unknown | ||
| + | |||||||
| Literals | |||||||
| literals_interactions | @@ -505,26 +559,30 @@Pass | Partial Does not narrow type of `x` with `x in Literal` type guard pattern. |
Partial Two instances parameterized with different literals are not compatible |
+Unknown | |||
| literals_literalstring | Unsupported Support for `LiteralString` is not implemented. |
Pass | Pass | Pass | +Unknown | ||
| literals_parameterizations | Partial Does not reject tuple within Literal. |
Pass | Pass | Pass | +Pass | ||
| literals_semantics | Pass | Pass | Pass | Pass | +Pass | ||
| + | |||||||
| Protocols | |||||||
| protocols_class_objects | @@ -532,68 +590,79 @@Pass | Pass | Partial Does not require concrete classes to be passed to type[Proto] |
+Unknown | |||
| protocols_definition | Partial Does not detect protocol mismatch if concrete method is missing annotations. Does not detect protocol mismatch if concrete method's parameters are position-only. |
Pass | Partial Does not detect protocol mismatch if concrete method is missing annotations. Does not detect protocol mismatch if concrete method's parameters are position-only. |
Partial Incorrectly handles some ClassVar examples in Protocol subtyping |
+Unknown | ||
| protocols_explicit | Pass* Does not report unimplemented attributes for class that explicitly derives from protocol until it is instantiated. |
Pass | Pass | Partial Does not reject call to super method with no default implementation. Does not detect stub methods inherited from protocols as abstract. |
+Unknown | ||
| protocols_generic | Pass | Pass | Pass | Pass | +Unknown | ||
| protocols_merging | Pass | Pass | Pass | Pass | +Unknown | ||
| protocols_modules | Pass | Pass | Pass | Partial Fails one subtyping example of protocol modules |
+Unknown | ||
| protocols_recursive | Pass | Pass | Pass | Pass | +Unknown | ||
| protocols_runtime_checkable | Partial Does not report unsafe overlap for runtime_checkable protocol. |
Pass | Partial Does not report unsafe overlap for runtime_checkable protocol. |
Pass | +Unknown | ||
| protocols_self | Pass | Pass | Pass | Pass | +Pass | ||
| protocols_subtyping | Pass | Pass | Pass | Pass | +Pass | ||
| protocols_variance | Pass | Pass | Pass | Unsupported | +Unknown | ||
| + | |||||||
| Callables | |||||||
| callables_annotation | @@ -601,26 +670,30 @@Pass | Partial Incorrectly treats "*args: T, **kwargs: T" as "..." when T is specialized to Any. Does not treat "*args: Any, **kargs: Any" as "..." when separated by keyword parameter. |
Partial Parameter names are lost when resolving ParamSpec |
+Unknown | |||
| callables_kwargs | Partial Allows callable without kwargs to be assigned to callable with unpacked kwargs |
Pass | Pass | Pass | +Unknown | ||
| callables_protocol | Pass | Pass | Pass | Pass | +Pass | ||
| callables_subtyping | Pass | Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Constructors | |||||||
| constructors_call_init | @@ -628,38 +701,44 @@Pass | Partial Does not report errors during binding to self parameter of __init__ method. Does not reject use of class-scoped type variables in annotation of self parameter in __init__ method. |
Partial Does not reject class-scoped type var in self param annotation |
+Unknown | |||
| constructors_call_metaclass | Unupported Does not honor metaclass __call__ method when evaluating constructor call. Does not skip evaluation of __new__ and __init__ if custom metaclass call returns non-class. |
Pass | Pass | Pass | +Unknown | ||
| constructors_call_new | Partial Does not support __new__ return type that is not a subclass of the class being constructed. Does not skip evaluation of __init__ based on __new__ return type. Does not report errors during binding to cls parameter of __new__ method. |
Pass | Partial Does not support __new__ return type that is not a subclass of the class being constructed. Does not skip evaluation of __init__ based on __new__ return type. Does not report errors during binding to cls parameter of __new__ method. |
Pass | +Unknown | ||
| constructors_call_type | Partial Does not validate call to custom metaclass __call__ method through type[T]. |
Pass | Partial Does not validate call to custom metaclass __call__ method through type[T]. |
Partial Does not check TypeVar type constructor using upper bound's __new__ |
+Unknown | ||
| constructors_callable | Partial Does not generate a union type for __new__ and __init__ when converting class to callable. Does not ignore __init__ based on __new__ return type when converting class to callable. Does not support __new__ return type that is different from class being constructed. |
Pass | Partial Does not generate a union type for __new__ and __init__ when converting class to callable. Does not ignore __init__ based on __new__ return type when converting class to callable. Does not support __new__ return type that is different from class being constructed. Struggles with some cases of self types |
Partial Converting constructor to callable does not preserve class-scoped type params. Converting constructor to callable does not substitute Self in __new__ Converting constructor to callable uses __new__ signature instead of __init__ |
+Unknown | ||
| constructors_consistency | Pass* Does not report inconsistency between __new__ and __init__ (optional). |
Pass | Pass | Pass | +Pass | ||
| + | |||||||
| Overloads | |||||||
| overloads_basic | @@ -667,32 +746,37 @@Pass | Pass | Pass | +Pass | |||
| overloads_consistency | Pass | Pass | Pass | Pass | +Unknown | ||
| overloads_definitions | Partial Allows @override to be on all overloads and implementation, instead of just implementation. |
Pass | Pass | Pass | +Unknown | ||
| overloads_definitions_stub | Partial Allows @override to appear in a stub file not on the first overload. |
Pass | Pass | Pass | +Unknown | ||
| overloads_evaluation | Partial Does not expand boolean arguments to Literal[True] and Literal[False]. Does not expand enum arguments to literal variants. Does not expand tuple arguments to possible combinations. Does not evaluate Any in some cases where overload is ambiguous. Evaluates Any in some cases where overload is not ambiguous. |
Partial Does not evaluate Any in some cases where overload is ambiguous. |
Partial Does not expand boolean arguments to Literal[True] and Literal[False]. Does not expand enum arguments to literal variants. Does not expand tuple arguments to possible combinations. Does not evaluate Any in some cases where overload is ambiguous. Evaluates Any in some cases where overload is not ambiguous. |
Pass | +Unknown | ||
| + | |||||||
| Exceptions | |||||||
| exceptions_context_managers | @@ -700,8 +784,9 @@Pass | Pass | Partial Some error suppressing context managers are not detected |
+Unknown | |||
| + | |||||||
| Dataclasses | |||||||
| dataclasses_descriptors | @@ -709,98 +794,114 @@Pass | Pass | Pass | +Unknown | |||
| dataclasses_final | Partial Wrongly requires a Final dataclass field to be initialized at class level. Doesn't support Final nested inside ClassVar. |
Pass | Partial Wrongly requires a Final dataclass field to be initialized at class level. Doesn't support Final nested inside ClassVar. |
Pass | +Pass | ||
| dataclasses_frozen | Pass | Pass | Pass | Pass | +Pass | ||
| dataclasses_hash | Partial Does not report when dataclass is not compatible with Hashable protocol. |
Pass | Partial Does not report when dataclass is not compatible with Hashable protocol. |
Pass | +Unknown | ||
| dataclasses_inheritance | Pass | Pass | Pass | Pass | +Unknown | ||
| dataclasses_kwonly | Pass | Pass | Pass | Pass | +Pass | ||
| dataclasses_match_args | Pass | Pass | Pass | Pass | +Unknown | ||
| dataclasses_order | Pass | Pass | Pass | Pass | +Pass | ||
| dataclasses_postinit | Pass | Pass | Pass | Pass | +Unknown | ||
| dataclasses_slots | Partial Does not reject write to instance variable that is not defined in __slots__. |
Pass | Partial Does not reject write to instance variable that is not defined in __slots__. |
Partial __slots__ is generated but not checked during attribute assignment |
+Unknown | ||
| dataclasses_transform_class | Pass | Pass | Pass | Pass | +Unknown | ||
| dataclasses_transform_converter | Unsupported Converter parameter not yet supported. |
Pass | Partial Converters are fully supported, failed to match generic overloads against other generics |
Pass | +Unknown | ||
| dataclasses_transform_field | Partial Does not properly handle field constructor that has default value for `kw_only` or `init` parameter. |
Pass | Pass | Pass | +Pass | ||
| dataclasses_transform_func | Partial Does not handle `kw_only=False` override when `kw_only_default=True`. Does not report error when `order=False` and comparison operators are used. |
Pass | Pass | Pass | +Pass | ||
| dataclasses_transform_meta | Pass | Pass | Pass | Pass | +Unknown | ||
| dataclasses_usage | Pass* Does not detect unannotated usage of `dataclasses.field()`. |
Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Typed dictionaries | |||||||
| typeddicts_alt_syntax | @@ -808,86 +909,100 @@Pass | Pass* Does not support keyword-argument form of alternative syntax (deprecated in 3.11). |
Pass | +Unknown | |||
| typeddicts_class_syntax | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_extra_items | Unsupported Not supported. |
Pass | Pass | Pass | +Unknown | ||
| typeddicts_final | Pass | Pass | Pass | Pass | +Pass | ||
| typeddicts_inheritance | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_operations | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_readonly | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_readonly_consistency | Pass | Pass | Pass | Pass | +Pass | ||
| typeddicts_readonly_inheritance | Partial Incorrectly rejects non-ReadOnly override of ReadOnly item. Incorrectly rejects override of ReadOnly item with another ReadOnly item with narrower type. Incorrectly rejects override of NotRequired ReadOnly item with a Required ReadOnly item. |
Pass | Partial Incorrectly rejects non-ReadOnly override of ReadOnly item. Incorrectly rejects override of ReadOnly item with another ReadOnly item with narrower type. Incorrectly rejects override of NotRequired ReadOnly item with a Required ReadOnly item. |
Pass | +Unknown | ||
| typeddicts_readonly_kwargs | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_readonly_update | Partial Incorrectly allows update of ReadOnly item. Incorrectly rejects update involving an item with Never type. |
Pass | Partial Incorrectly allows update of ReadOnly item. |
Pass | +Unknown | ||
| typeddicts_required | Pass | Pass | Pass | Pass | +Unknown | ||
| typeddicts_type_consistency | Pass | Pass | Pass | Pass | +Pass | ||
| typeddicts_usage | Pass | Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Tuples | |||||||
| tuples_type_compat | @@ -895,20 +1010,23 @@Pass | Pass | Pass | +Pass | |||
| tuples_type_form | Pass | Pass | Pass | Pass | +Unknown | ||
| tuples_unpacked | Partial "More than one unpack" error is missing in some cases. |
Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Named tuples | |||||||
| namedtuples_define_class | @@ -916,26 +1034,30 @@Pass | Partial Does not reject override of named tuple attribute in child class. |
Pass | +Unknown | |||
| namedtuples_define_functional | Pass | Pass | Pass | Pass | +Unknown | ||
| namedtuples_type_compat | Pass | Pass | Pass | Pass | +Pass | ||
| namedtuples_usage | Partial Does not reject attempt to delete named tuple field by name. |
Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Enumerations | |||||||
| enums_behaviors | @@ -943,38 +1065,44 @@Pass | Pass | Pass | +Pass | |||
| enums_definition | Pass | Pass | Pass | Pass | +Pass | ||
| enums_expansion | Partial Improperly applies narrowing to Flag subclass. |
Pass | Partial Improperly applies narrowing to Flag subclass. |
Pass | +Unknown | ||
| enums_member_names | Pass* Does not support special-cased handling of member name literal types in some cases (optional). |
Pass | Pass | Pass | +Pass | ||
| enums_member_values | Partial Does not enforce declared type of `_value_`. Does not enforce assigned tuple types for enum members (optional). |
Pass | Partial Does not enforce declared type of `_value_`. |
Pass | +Unknown | ||
| enums_members | Partial Does not treat attribute with annotation and no assignment as non-member. Does not treat callables as non-members. Does not honor `enum.member` as method decorator. Does not properly handle aliased enum members. Does not support `_ignore_` mechanism (optional). Does not treat attributes with private names as non-members. |
Pass* Does not support `_ignore_` mechanism (optional). |
Partial Does not honor `enum.member` as method decorator. Does not properly handle aliased enum members. Does not treat somecallables as non-members. |
Partial Enum members that are aliases of other members do not resolved to the aliased member's type |
+Unknown | ||
| + | |||||||
| Type narrowing | |||||||
| narrowing_typeguard | @@ -982,14 +1110,16 @@Pass | Pass | Pass | +Unknown | |||
| narrowing_typeis | Pass | Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Type checker directives | |||||||
| directives_assert_type | @@ -997,62 +1127,72 @@Pass | Pass | Pass | +Pass | |||
| directives_cast | Pass | Pass | Pass | Pass | +Pass | ||
| directives_deprecated | Pass | Pass | Pass | Pass | +Unknown | ||
| directives_no_type_check | Partial Does not honor `@no_type_check` class decorator (allowed). Does not reject invalid call of `@no_type_check` function. |
Pass* Does not honor `@no_type_check` class decorator (allowed). |
Pass | Pass | +Pass | ||
| directives_reveal_type | Pass | Pass | Pass | Pass | +Pass | ||
| directives_type_checking | Pass | Pass | Pass | Pass | +Unknown | ||
| directives_type_ignore | Partial Does not honor "# type: ignore" comment if comment includes additional text. |
Pass | Partial Does not honor "# type: ignore" comment if comment includes additional text. |
Pass | +Pass | ||
| directives_type_ignore_file1 | Pass | Pass | Pass | Pass | +Pass | ||
| directives_type_ignore_file2 | Pass | Pass | Pass | Pass | +Pass | ||
| directives_version_platform | Pass* Does not understand three-element form of sys.version checks. Does not understand os.name checks. |
Pass | Pass | Pass | +Unknown | ||
| + | |||||||
| Historical and deprecated features | |||||||
| historical_positional | @@ -1060,6 +1200,7 @@Pass | Partial Does not reject positional-only parameter after non-positional-only parameter. Treats keyword-only parameter as positional-only. Applies legacy positional-only rules when PEP 570 syntax is used. |
Pass | +Unknown | |||