ruff/crates/ty_python_semantic/resources/mdtest
Carl Meyer 4fdb4e8219
[ty] avoid unions of generic aliases of the same class in fixpoint (#21909)
Partially addresses https://github.com/astral-sh/ty/issues/1732
Fixes https://github.com/astral-sh/ty/issues/1800

## Summary

At each fixpoint iteration, we union the "previous" and "current"
iteration types, to ensure that the type can only widen at each
iteration. This prevents oscillation and ensures convergence.

But some unions triggered by this behavior (in particular, unions of
differently-specialized generic-aliases of the same class) never
simplify, and cause spurious errors. Since we haven't seen examples of
oscillating types involving class-literal or generic-alias types, just
don't union those.

There may be more thorough/principled ways to avoid undesirable unions
in fixpoint iteration, but this narrow change seems like it results in
strict improvement.

## Test Plan

Removes two false positive `unsupported-class-base` in mdtests, and
several in the ecosystem, without causing other regression.
2025-12-11 09:53:43 -08:00
..
annotations [ty] Avoid inferring types for invalid binary expressions in string annotations (#21911) 2025-12-11 09:40:19 +01:00
assignment [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
binary [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
boolean
boundness_declaredness [ty] Reformulation of public symbol inference test suite (#20667) 2025-10-01 14:26:17 +02:00
call [ty] Support implicit type of cls in signatures (#21771) 2025-12-10 16:56:20 -05:00
class [ty] Infer type of implicit cls parameter in method bodies (#21685) 2025-12-10 10:31:28 +01:00
comparison [ty] Improve diagnostics for unsupported comparison operations (#21737) 2025-12-02 19:58:45 +00:00
comprehensions [ty] fix global symbol lookup from eager scopes (#21317) 2025-11-12 10:15:51 -08:00
conditional [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
dataclasses [ty] Respect kw_only from parent class (#21820) 2025-12-10 10:12:18 +01:00
declaration
diagnostics [ty] Add subdiagnostic hint if the user wrote X = Any rather than X: Any (#21777) 2025-12-03 20:42:21 +00:00
directives [ty] Minor improvements to assert_type diagnostics (#21811) 2025-12-05 12:33:30 +00:00
doc
exception [ty] Improve diagnostics for invalid exceptions (#21475) 2025-11-15 22:12:00 +00:00
expression [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
external [ty] Type inference for @asynccontextmanager (#21876) 2025-12-09 22:49:00 +01:00
function [ty] Improve the display of various special-form types (#21775) 2025-12-03 21:19:59 +00:00
generics [ty] avoid unions of generic aliases of the same class in fixpoint (#21909) 2025-12-11 09:53:43 -08:00
ide_support [ty] Support type[T] with type variables (#21650) 2025-11-28 09:20:24 +01:00
import [ty] cleanup test path (#21781) 2025-12-03 21:54:50 +00:00
libraries [ty] Generic types aliases (implicit and PEP 613) (#21553) 2025-11-28 20:38:24 +01:00
literal [ty] Type inference for genererator expressions (#21437) 2025-11-14 13:04:11 +00:00
loops [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
narrow [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
regression [ty] Avoid diagnostic when typing_extensions.ParamSpec uses default parameter (#21839) 2025-12-08 12:34:30 +00:00
scopes [ty] Make __getattr__ available for ModuleType instances (#21450) 2025-11-14 13:59:14 +01:00
shadowing
snapshots [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
stubs [ty] Better invalid-assignment diagnostics (#21476) 2025-11-18 14:31:04 +01:00
subscript [ty] support type[tuple[...]] (#21652) 2025-12-01 11:49:26 +01:00
suppressions [ty] Add code action to ignore diagnostic on the current line (#21595) 2025-11-29 15:41:54 +01:00
type_compendium [ty] Improve literal promotion heuristics (#21439) 2025-11-14 16:13:56 -05:00
type_of [ty] Fix disjointness checks with type-of @final classes (#21770) 2025-12-10 15:15:10 -05:00
type_properties [ty] Fix disjointness checks with type-of @final classes (#21770) 2025-12-10 15:15:10 -05:00
type_qualifiers [ty] Avoid double-analyzing tuple in Final subscript (#21828) 2025-12-07 14:27:14 +00:00
unary [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
with [ty] Type inference for @asynccontextmanager (#21876) 2025-12-09 22:49:00 +01:00
.mdformat.toml
async.md [ty] Generic types aliases (implicit and PEP 613) (#21553) 2025-11-28 20:38:24 +01:00
attributes.md [ty] Support type[T] with type variables (#21650) 2025-11-28 09:20:24 +01:00
bidirectional.md [ty] Improve diagnostics for unsupported comparison operations (#21737) 2025-12-02 19:58:45 +00:00
classes.md [ty] Fix bug where ty would think all types had an __mro__ attribute (#20995) 2025-10-27 11:19:12 +00:00
cycle.md [ty] remove the visitor parameter in the recursive_type_normalized_impl method (#21701) 2025-12-01 08:48:43 +01:00
decorators.md
del.md [ty] No union with Unknown for module-global symbols (#20664) 2025-10-01 16:40:30 +02:00
deprecated.md [ty] Consistent use of American english (in rules) (#19488) 2025-07-22 16:10:38 +02:00
descriptor_protocol.md [ty] Use the return type of __get__ for descriptor lookups even when __get__ is called with incorrect arguments (#21424) 2025-11-13 12:05:10 +00:00
enums.md [ty] Support type[T] with type variables (#21650) 2025-11-28 09:20:24 +01:00
exhaustiveness_checking.md [ty] Exhaustiveness checking for generic classes (#21726) 2025-12-01 13:52:36 +01:00
final.md [ty] Improve @override, @final and Liskov checks in cases where there are multiple reachable definitions (#21767) 2025-12-03 12:51:36 +00:00
implicit_type_aliases.md [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
instance_layout_conflict.md [ty] initial support for slots=True in dataclasses (#20278) 2025-09-07 18:25:35 +01:00
intersection_types.md [ty] Use "cannot" consistently over "can not" (#21255) 2025-11-03 10:38:20 -05:00
invalid_syntax.md [ty] Avoid double-inference on non-tuple argument to Annotated (#21837) 2025-12-08 10:24:05 -05:00
known_constants.md
liskov.md [ty] Carry generic context through when converting class into Callable (#21798) 2025-12-05 08:57:21 -05:00
literal_promotion.md [ty] Narrow type context during literal promotion in generic class constructors (#21574) 2025-11-21 17:05:32 -05:00
mdtest_config.md
mdtest_custom_typeshed.md [ty] Remove Type::Tuple (#19669) 2025-08-11 22:03:32 +01:00
metaclass.md
mro.md [ty] Improve the display of various special-form types (#21775) 2025-12-03 21:19:59 +00:00
named_tuple.md [ty] Support implicit type of cls in signatures (#21771) 2025-12-10 16:56:20 -05:00
overloads.md [ty] Infer type of self for decorated methods and properties (#21123) 2025-10-29 21:22:38 +00:00
override.md [ty] Improve @override, @final and Liskov checks in cases where there are multiple reachable definitions (#21767) 2025-12-03 12:51:36 +00:00
pep613_type_aliases.md [ty] Improve the display of various special-form types (#21775) 2025-12-03 21:19:59 +00:00
pep695_type_aliases.md [ty] Support typevar-specialized dynamic types in generic type aliases (#21730) 2025-12-03 10:00:02 +01:00
properties.md [ty] Use the return type of __get__ for descriptor lookups even when __get__ is called with incorrect arguments (#21424) 2025-11-13 12:05:10 +00:00
protocols.md Fix stack overflow with recursive generic protocols (depth limit) (#21858) 2025-12-09 09:05:18 -08:00
public_types.md [ty] Disambiguate classes that live in different modules but have the same fully qualified names (#20756) 2025-10-08 18:27:40 +01:00
statically_known_branches.md [ty] Rename "possibly unbound" diagnostics to "possibly missing" (#20492) 2025-09-23 14:26:55 +00:00
sys_platform.md
sys_version_info.md [ty] support PEP 613 type aliases (#21394) 2025-11-20 17:59:35 -08:00
t_strings.md [ty] Add support for PEP 750 t-strings (#20085) 2025-08-25 18:49:49 +00:00
terminal_statements.md [ty] improve lazy scope place lookup (#19321) 2025-07-25 07:11:11 +00:00
ty_extensions.md [ty] Uniformly use "not supported" in diagnostics (#21916) 2025-12-11 15:03:55 +00:00
typed_dict.md [ty] add SyntheticTypedDictType and implement normalized and is_equivalent_to (#21784) 2025-12-10 20:36:36 +00:00
union_types.md [ty] Introduce TypeRelation::Redundancy (#20602) 2025-10-03 18:35:30 +01:00
unpacking.md [ty] Infer more precise types for collection literals (#20360) 2025-09-17 18:51:50 -04:00
unreachable.md [ty] Add subdiagnostic hint if a variable with type Never is used in a type expression (#21660) 2025-11-27 12:48:18 +00:00