mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-24 14:15:11 +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[()]");
|
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>
|
template <typename K, typename V>
|
||||||
struct handle_type_name<typing::Dict<K, V>> {
|
struct handle_type_name<typing::Dict<K, V>> {
|
||||||
static constexpr auto name = const_name("dict[") + make_caster<K>::name + const_name(", ")
|
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_float_str", [](const py::typing::Tuple<py::float_, py::str> &) {});
|
||||||
m.def("annotate_tuple_empty", [](const py::typing::Tuple<> &) {});
|
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_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
||||||
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
||||||
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
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):
|
def test_dict_annotations(doc):
|
||||||
assert (
|
assert (
|
||||||
doc(m.annotate_dict_str_int)
|
doc(m.annotate_dict_str_int)
|
||||||
|
Loading…
Reference in New Issue
Block a user