mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-14 22:35:11 +00:00
[ty] Allow classes to inherit from type[Any]
or type[Unknown]
(#18060)
This commit is contained in:
parent
41fa082414
commit
7e9b0df18a
5 changed files with 68 additions and 48 deletions
|
@ -543,13 +543,6 @@ impl<'db> Type<'db> {
|
|||
Self::Dynamic(DynamicType::Unknown)
|
||||
}
|
||||
|
||||
pub(crate) fn into_dynamic(self) -> Option<DynamicType> {
|
||||
match self {
|
||||
Type::Dynamic(dynamic_type) => Some(dynamic_type),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn object(db: &'db dyn Db) -> Self {
|
||||
KnownClass::Object.to_instance(db)
|
||||
}
|
||||
|
|
|
@ -107,16 +107,20 @@ impl<'db> ClassBase<'db> {
|
|||
{
|
||||
Self::try_from_type(db, todo_type!("GenericAlias instance"))
|
||||
}
|
||||
Type::SubclassOf(subclass_of) => subclass_of
|
||||
.subclass_of()
|
||||
.into_dynamic()
|
||||
.map(ClassBase::Dynamic),
|
||||
Type::Intersection(inter) => {
|
||||
let dynamic_element = inter
|
||||
let valid_element = inter
|
||||
.positive(db)
|
||||
.iter()
|
||||
.find_map(|elem| elem.into_dynamic())?;
|
||||
.find_map(|elem| ClassBase::try_from_type(db, *elem))?;
|
||||
|
||||
if ty.is_disjoint_from(db, KnownClass::Type.to_instance(db)) {
|
||||
None
|
||||
} else {
|
||||
Some(ClassBase::Dynamic(dynamic_element))
|
||||
Some(valid_element)
|
||||
}
|
||||
}
|
||||
Type::Union(_) => None, // TODO -- forces consideration of multiple possible MROs?
|
||||
|
@ -137,7 +141,6 @@ impl<'db> ClassBase<'db> {
|
|||
| Type::LiteralString
|
||||
| Type::Tuple(_)
|
||||
| Type::ModuleLiteral(_)
|
||||
| Type::SubclassOf(_)
|
||||
| Type::TypeVar(_)
|
||||
| Type::BoundSuper(_)
|
||||
| Type::ProtocolInstance(_)
|
||||
|
|
|
@ -138,6 +138,13 @@ impl<'db> SubclassOfInner<'db> {
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) const fn into_dynamic(self) -> Option<DynamicType> {
|
||||
match self {
|
||||
Self::Class(_) => None,
|
||||
Self::Dynamic(dynamic) => Some(dynamic),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn try_from_type(db: &'db dyn Db, ty: Type<'db>) -> Option<Self> {
|
||||
match ty {
|
||||
Type::Dynamic(dynamic) => Some(Self::Dynamic(dynamic)),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue