diff --git a/crates/ty_python_semantic/resources/mdtest/attributes.md b/crates/ty_python_semantic/resources/mdtest/attributes.md index 4f0105abe5..031cb6e64b 100644 --- a/crates/ty_python_semantic/resources/mdtest/attributes.md +++ b/crates/ty_python_semantic/resources/mdtest/attributes.md @@ -2309,6 +2309,20 @@ reveal_type(Toggle().x) # revealed: Literal[True] reveal_type(Toggle().y) # revealed: Unknown | Literal[True] ``` +Make sure that the growing union of literals `Literal[0, 1, 2, ...]` collapses to `int` during +fixpoint iteration. This is a regression test for . + +```py +class Counter: + def __init__(self: "Counter"): + self.count = 0 + + def increment(self: "Counter"): + self.count = self.count + 1 + +reveal_type(Counter().count) # revealed: Unknown | int +``` + ### Builtin types attributes This test can probably be removed eventually, but we currently include it because we do not yet diff --git a/crates/ty_python_semantic/src/types/builder.rs b/crates/ty_python_semantic/src/types/builder.rs index c33ed3fa09..1ea07748a8 100644 --- a/crates/ty_python_semantic/src/types/builder.rs +++ b/crates/ty_python_semantic/src/types/builder.rs @@ -202,7 +202,10 @@ enum ReduceResult<'db> { // TODO increase this once we extend `UnionElement` throughout all union/intersection // representations, so that we can make large unions of literals fast in all operations. -const MAX_UNION_LITERALS: usize = 200; +// +// For now (until we solve https://github.com/astral-sh/ty/issues/957), keep this number +// below 200, which is the salsa fixpoint iteration limit. +const MAX_UNION_LITERALS: usize = 199; pub(crate) struct UnionBuilder<'db> { elements: Vec>,