mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
Create handle_type_name specialization to type-hint variable length tuples (#5051)
This commit is contained in:
parent
ddb8b67a8a
commit
65370f330e
@ -79,6 +79,13 @@ struct handle_type_name<typing::Tuple<>> {
|
||||
static constexpr auto name = const_name("tuple[()]");
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct handle_type_name<typing::Tuple<T, ellipsis>> {
|
||||
// PEP 484 specifies this syntax for a variable-length tuple
|
||||
static constexpr auto name
|
||||
= const_name("tuple[") + make_caster<T>::name + const_name(", ...]");
|
||||
};
|
||||
|
||||
template <typename K, typename V>
|
||||
struct handle_type_name<typing::Dict<K, V>> {
|
||||
static constexpr auto name = const_name("dict[") + make_caster<K>::name + const_name(", ")
|
||||
|
@ -825,6 +825,8 @@ TEST_SUBMODULE(pytypes, m) {
|
||||
|
||||
m.def("annotate_tuple_float_str", [](const py::typing::Tuple<py::float_, py::str> &) {});
|
||||
m.def("annotate_tuple_empty", [](const py::typing::Tuple<> &) {});
|
||||
m.def("annotate_tuple_variable_length",
|
||||
[](const py::typing::Tuple<py::float_, py::ellipsis> &) {});
|
||||
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
||||
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
||||
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
||||
|
@ -911,6 +911,13 @@ def test_tuple_empty_annotations(doc):
|
||||
)
|
||||
|
||||
|
||||
def test_tuple_variable_length_annotations(doc):
|
||||
assert (
|
||||
doc(m.annotate_tuple_variable_length)
|
||||
== "annotate_tuple_variable_length(arg0: tuple[float, ...]) -> None"
|
||||
)
|
||||
|
||||
|
||||
def test_dict_annotations(doc):
|
||||
assert (
|
||||
doc(m.annotate_dict_str_int)
|
||||
|
Loading…
Reference in New Issue
Block a user