mirror of https://github.com/astral-sh/ruff
improve signature of `tuple` constructor
This commit is contained in:
parent
12e72041c6
commit
19c5cd8018
|
|
@ -55,7 +55,10 @@ def f(x: Iterable[int], y: list[str], z: Never, aa: list[Never], bb: LiskovUncom
|
||||||
|
|
||||||
reveal_type(tuple((1, 2))) # revealed: tuple[Literal[1], Literal[2]]
|
reveal_type(tuple((1, 2))) # revealed: tuple[Literal[1], Literal[2]]
|
||||||
|
|
||||||
reveal_type(tuple([1])) # revealed: tuple[object, ...]
|
reveal_type(tuple([1])) # revealed: tuple[Unknown | int, ...]
|
||||||
|
|
||||||
|
x1: tuple[int, ...] = tuple([1])
|
||||||
|
reveal_type(x1) # revealed: tuple[int, ...]
|
||||||
|
|
||||||
# error: [invalid-argument-type]
|
# error: [invalid-argument-type]
|
||||||
reveal_type(tuple[int]([1])) # revealed: tuple[int]
|
reveal_type(tuple[int]([1])) # revealed: tuple[int]
|
||||||
|
|
|
||||||
|
|
@ -6122,30 +6122,35 @@ impl<'db> Type<'db> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(KnownClass::Tuple) => {
|
Some(KnownClass::Tuple) => {
|
||||||
let object = Type::object();
|
let element_ty =
|
||||||
|
BoundTypeVarInstance::synthetic(db, "T", TypeVarVariance::Covariant);
|
||||||
|
|
||||||
// ```py
|
// ```py
|
||||||
// class tuple:
|
// class tuple(Sequence[_T_co]):
|
||||||
// @overload
|
// @overload
|
||||||
// def __new__(cls) -> tuple[()]: ...
|
// def __new__(cls) -> tuple[()]: ...
|
||||||
// @overload
|
// @overload
|
||||||
// def __new__(cls, iterable: Iterable[object]) -> tuple[object, ...]: ...
|
// def __new__(cls, iterable: Iterable[_T_co]) -> tuple[_T_co, ...]: ...
|
||||||
// ```
|
// ```
|
||||||
CallableBinding::from_overloads(
|
CallableBinding::from_overloads(
|
||||||
self,
|
self,
|
||||||
[
|
[
|
||||||
Signature::new(Parameters::empty(), Some(Type::empty_tuple(db))),
|
Signature::new(Parameters::empty(), Some(Type::empty_tuple(db))),
|
||||||
Signature::new(
|
Signature::new_generic(
|
||||||
|
Some(GenericContext::from_typevar_instances(db, [element_ty])),
|
||||||
Parameters::new(
|
Parameters::new(
|
||||||
db,
|
db,
|
||||||
[Parameter::positional_only(Some(Name::new_static(
|
[Parameter::positional_only(Some(Name::new_static(
|
||||||
"iterable",
|
"iterable",
|
||||||
)))
|
)))
|
||||||
.with_annotated_type(
|
.with_annotated_type(
|
||||||
KnownClass::Iterable.to_specialized_instance(db, [object]),
|
KnownClass::Iterable.to_specialized_instance(
|
||||||
|
db,
|
||||||
|
[Type::TypeVar(element_ty)],
|
||||||
|
),
|
||||||
)],
|
)],
|
||||||
),
|
),
|
||||||
Some(Type::homogeneous_tuple(db, object)),
|
Some(Type::homogeneous_tuple(db, Type::TypeVar(element_ty))),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue