Skip to content

Commit ed5a8cb

Browse files
committed
[ty] Derive PartialOrd, Ord for KnownInstanceType
1 parent 9ec4a17 commit ed5a8cb

File tree

2 files changed

+10
-140
lines changed

2 files changed

+10
-140
lines changed

crates/ty_python_semantic/src/types/known_instance.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ use ruff_db::files::File;
1818

1919
/// Enumeration of specific runtime symbols that are special enough
2020
/// that they can each be considered to inhabit a unique type.
21-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Update)]
21+
///
22+
/// # Ordering
23+
///
24+
/// Ordering between variants is stable and should be the same between runs.
25+
/// Ordering within variants (for variants that wrap associate data)
26+
/// is based on the known-instance's salsa-assigned id and not on its values.
27+
/// The id may change between runs, or when the type var instance was garbage collected and recreated.
28+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Update, PartialOrd, Ord)]
2229
pub enum KnownInstanceType<'db> {
2330
/// The symbol `typing.Annotated` (which can also be found as `typing_extensions.Annotated`)
2431
Annotated,

crates/ty_python_semantic/src/types/type_ordering.rs

Lines changed: 2 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::cmp::Ordering;
33
use crate::db::Db;
44

55
use super::{
6-
DynamicType, KnownInstanceType, SuperOwnerKind, TodoType, Type, class_base::ClassBase,
6+
DynamicType, SuperOwnerKind, TodoType, Type, class_base::ClassBase,
77
subclass_of::SubclassOfInner,
88
};
99

@@ -180,144 +180,7 @@ pub(super) fn union_or_intersection_elements_ordering<'db>(
180180
(_, Type::BoundSuper(_)) => Ordering::Greater,
181181

182182
(Type::KnownInstance(left_instance), Type::KnownInstance(right_instance)) => {
183-
match (left_instance, right_instance) {
184-
(KnownInstanceType::Tuple, _) => Ordering::Less,
185-
(_, KnownInstanceType::Tuple) => Ordering::Greater,
186-
187-
(KnownInstanceType::AlwaysFalsy, _) => Ordering::Less,
188-
(_, KnownInstanceType::AlwaysFalsy) => Ordering::Greater,
189-
190-
(KnownInstanceType::AlwaysTruthy, _) => Ordering::Less,
191-
(_, KnownInstanceType::AlwaysTruthy) => Ordering::Greater,
192-
193-
(KnownInstanceType::Annotated, _) => Ordering::Less,
194-
(_, KnownInstanceType::Annotated) => Ordering::Greater,
195-
196-
(KnownInstanceType::Callable, _) => Ordering::Less,
197-
(_, KnownInstanceType::Callable) => Ordering::Greater,
198-
199-
(KnownInstanceType::ChainMap, _) => Ordering::Less,
200-
(_, KnownInstanceType::ChainMap) => Ordering::Greater,
201-
202-
(KnownInstanceType::ClassVar, _) => Ordering::Less,
203-
(_, KnownInstanceType::ClassVar) => Ordering::Greater,
204-
205-
(KnownInstanceType::Concatenate, _) => Ordering::Less,
206-
(_, KnownInstanceType::Concatenate) => Ordering::Greater,
207-
208-
(KnownInstanceType::Counter, _) => Ordering::Less,
209-
(_, KnownInstanceType::Counter) => Ordering::Greater,
210-
211-
(KnownInstanceType::DefaultDict, _) => Ordering::Less,
212-
(_, KnownInstanceType::DefaultDict) => Ordering::Greater,
213-
214-
(KnownInstanceType::Deque, _) => Ordering::Less,
215-
(_, KnownInstanceType::Deque) => Ordering::Greater,
216-
217-
(KnownInstanceType::Dict, _) => Ordering::Less,
218-
(_, KnownInstanceType::Dict) => Ordering::Greater,
219-
220-
(KnownInstanceType::Final, _) => Ordering::Less,
221-
(_, KnownInstanceType::Final) => Ordering::Greater,
222-
223-
(KnownInstanceType::FrozenSet, _) => Ordering::Less,
224-
(_, KnownInstanceType::FrozenSet) => Ordering::Greater,
225-
226-
(KnownInstanceType::TypeGuard, _) => Ordering::Less,
227-
(_, KnownInstanceType::TypeGuard) => Ordering::Greater,
228-
229-
(KnownInstanceType::TypedDict, _) => Ordering::Less,
230-
(_, KnownInstanceType::TypedDict) => Ordering::Greater,
231-
232-
(KnownInstanceType::List, _) => Ordering::Less,
233-
(_, KnownInstanceType::List) => Ordering::Greater,
234-
235-
(KnownInstanceType::Literal, _) => Ordering::Less,
236-
(_, KnownInstanceType::Literal) => Ordering::Greater,
237-
238-
(KnownInstanceType::LiteralString, _) => Ordering::Less,
239-
(_, KnownInstanceType::LiteralString) => Ordering::Greater,
240-
241-
(KnownInstanceType::Optional, _) => Ordering::Less,
242-
(_, KnownInstanceType::Optional) => Ordering::Greater,
243-
244-
(KnownInstanceType::OrderedDict, _) => Ordering::Less,
245-
(_, KnownInstanceType::OrderedDict) => Ordering::Greater,
246-
247-
(KnownInstanceType::Generic(left), KnownInstanceType::Generic(right)) => {
248-
left.cmp(right)
249-
}
250-
(KnownInstanceType::Generic(_), _) => Ordering::Less,
251-
(_, KnownInstanceType::Generic(_)) => Ordering::Greater,
252-
253-
(KnownInstanceType::Protocol(left), KnownInstanceType::Protocol(right)) => {
254-
left.cmp(right)
255-
}
256-
(KnownInstanceType::Protocol(_), _) => Ordering::Less,
257-
(_, KnownInstanceType::Protocol(_)) => Ordering::Greater,
258-
259-
(KnownInstanceType::NoReturn, _) => Ordering::Less,
260-
(_, KnownInstanceType::NoReturn) => Ordering::Greater,
261-
262-
(KnownInstanceType::Never, _) => Ordering::Less,
263-
(_, KnownInstanceType::Never) => Ordering::Greater,
264-
265-
(KnownInstanceType::Set, _) => Ordering::Less,
266-
(_, KnownInstanceType::Set) => Ordering::Greater,
267-
268-
(KnownInstanceType::Type, _) => Ordering::Less,
269-
(_, KnownInstanceType::Type) => Ordering::Greater,
270-
271-
(KnownInstanceType::TypeAlias, _) => Ordering::Less,
272-
(_, KnownInstanceType::TypeAlias) => Ordering::Greater,
273-
274-
(KnownInstanceType::Unknown, _) => Ordering::Less,
275-
(_, KnownInstanceType::Unknown) => Ordering::Greater,
276-
277-
(KnownInstanceType::Not, _) => Ordering::Less,
278-
(_, KnownInstanceType::Not) => Ordering::Greater,
279-
280-
(KnownInstanceType::Intersection, _) => Ordering::Less,
281-
(_, KnownInstanceType::Intersection) => Ordering::Greater,
282-
283-
(KnownInstanceType::TypeOf, _) => Ordering::Less,
284-
(_, KnownInstanceType::TypeOf) => Ordering::Greater,
285-
286-
(KnownInstanceType::CallableTypeOf, _) => Ordering::Less,
287-
(_, KnownInstanceType::CallableTypeOf) => Ordering::Greater,
288-
289-
(KnownInstanceType::Unpack, _) => Ordering::Less,
290-
(_, KnownInstanceType::Unpack) => Ordering::Greater,
291-
292-
(KnownInstanceType::TypingSelf, _) => Ordering::Less,
293-
(_, KnownInstanceType::TypingSelf) => Ordering::Greater,
294-
295-
(KnownInstanceType::Required, _) => Ordering::Less,
296-
(_, KnownInstanceType::Required) => Ordering::Greater,
297-
298-
(KnownInstanceType::NotRequired, _) => Ordering::Less,
299-
(_, KnownInstanceType::NotRequired) => Ordering::Greater,
300-
301-
(KnownInstanceType::TypeIs, _) => Ordering::Less,
302-
(_, KnownInstanceType::TypeIs) => Ordering::Greater,
303-
304-
(KnownInstanceType::ReadOnly, _) => Ordering::Less,
305-
(_, KnownInstanceType::ReadOnly) => Ordering::Greater,
306-
307-
(KnownInstanceType::Union, _) => Ordering::Less,
308-
(_, KnownInstanceType::Union) => Ordering::Greater,
309-
310-
(
311-
KnownInstanceType::TypeAliasType(left),
312-
KnownInstanceType::TypeAliasType(right),
313-
) => left.cmp(right),
314-
(KnownInstanceType::TypeAliasType(_), _) => Ordering::Less,
315-
(_, KnownInstanceType::TypeAliasType(_)) => Ordering::Greater,
316-
317-
(KnownInstanceType::TypeVar(left), KnownInstanceType::TypeVar(right)) => {
318-
left.cmp(right)
319-
}
320-
}
183+
left_instance.cmp(right_instance)
321184
}
322185

323186
(Type::KnownInstance(_), _) => Ordering::Less,

0 commit comments

Comments
 (0)