mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-01 06:11:21 +00:00
[ty] Simplify Any | (Any & T)
to Any
(#20593)
This commit is contained in:
parent
57e1ff8294
commit
e4de179cdd
3 changed files with 20 additions and 1 deletions
|
@ -133,6 +133,11 @@ class Single(Enum):
|
||||||
VALUE = 1
|
VALUE = 1
|
||||||
|
|
||||||
static_assert(is_equivalent_to(P | Q | Single, Literal[Single.VALUE] | Q | P))
|
static_assert(is_equivalent_to(P | Q | Single, Literal[Single.VALUE] | Q | P))
|
||||||
|
|
||||||
|
static_assert(is_equivalent_to(Any, Any | Intersection[Any, str]))
|
||||||
|
static_assert(is_equivalent_to(Any, Intersection[str, Any] | Any))
|
||||||
|
static_assert(is_equivalent_to(Any, Any | Intersection[Any, Not[None]]))
|
||||||
|
static_assert(is_equivalent_to(Any, Intersection[Not[None], Any] | Any))
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tuples
|
## Tuples
|
||||||
|
|
|
@ -1050,6 +1050,13 @@ impl<'db> Type<'db> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) const fn into_intersection(self) -> Option<IntersectionType<'db>> {
|
||||||
|
match self {
|
||||||
|
Type::Intersection(intersection_type) => Some(intersection_type),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub(crate) fn expect_union(self) -> UnionType<'db> {
|
pub(crate) fn expect_union(self) -> UnionType<'db> {
|
||||||
|
|
|
@ -504,9 +504,16 @@ impl<'db> UnionBuilder<'db> {
|
||||||
if should_simplify_full && !matches!(element_type, Type::TypeAlias(_)) {
|
if should_simplify_full && !matches!(element_type, Type::TypeAlias(_)) {
|
||||||
if ty.is_equivalent_to(self.db, element_type)
|
if ty.is_equivalent_to(self.db, element_type)
|
||||||
|| ty.is_subtype_of(self.db, element_type)
|
|| ty.is_subtype_of(self.db, element_type)
|
||||||
|
|| ty.into_intersection().is_some_and(|intersection| {
|
||||||
|
intersection.positive(self.db).contains(&element_type)
|
||||||
|
})
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
} else if element_type.is_subtype_of(self.db, ty) {
|
} else if element_type.is_subtype_of(self.db, ty)
|
||||||
|
|| element_type
|
||||||
|
.into_intersection()
|
||||||
|
.is_some_and(|intersection| intersection.positive(self.db).contains(&ty))
|
||||||
|
{
|
||||||
to_remove.push(index);
|
to_remove.push(index);
|
||||||
} else if ty_negated.is_subtype_of(self.db, element_type) {
|
} else if ty_negated.is_subtype_of(self.db, element_type) {
|
||||||
// We add `ty` to the union. We just checked that `~ty` is a subtype of an
|
// We add `ty` to the union. We just checked that `~ty` is a subtype of an
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue