mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
Fix py::kw_only when used before the first arg of a method (#3488)
* Fix py::kw_only when used before the first arg of a method The implicit space for the `self` argument isn't added until we hit the first argument, but this wasn't being done for kw_only or pos_only, and so a kw_only before the first argument would break. This fixes it by properly checking whether we need to add the self arg. (The pos_only issue here was extremely mild -- you didn't get the `/` in the docstring, but AFAICT it has no other effect since there are no meaningful arguments before it anyway). * Style changes - rename check_have_self_arg -> append_self_arg_if_needed - move the argument name inline comments before the args instead of after
This commit is contained in:
committed by
GitHub
parent
56322dafc9
commit
673b4be3d7
@@ -229,6 +229,19 @@ def test_keyword_only_args(msg):
|
||||
"""
|
||||
)
|
||||
|
||||
# https://github.com/pybind/pybind11/pull/3402#issuecomment-963341987
|
||||
x = m.first_arg_kw_only(i=1)
|
||||
x.method()
|
||||
x.method(i=1, j=2)
|
||||
assert (
|
||||
m.first_arg_kw_only.__init__.__doc__
|
||||
== "__init__(self: pybind11_tests.kwargs_and_defaults.first_arg_kw_only, *, i: int = 0) -> None\n" # noqa: E501 line too long
|
||||
)
|
||||
assert (
|
||||
m.first_arg_kw_only.method.__doc__
|
||||
== "method(self: pybind11_tests.kwargs_and_defaults.first_arg_kw_only, *, i: int = 1, j: int = 2) -> None\n" # noqa: E501 line too long
|
||||
)
|
||||
|
||||
|
||||
def test_positional_only_args(msg):
|
||||
assert m.pos_only_all(1, 2) == (1, 2)
|
||||
@@ -310,6 +323,14 @@ def test_positional_only_args(msg):
|
||||
{"i": 5, "m": 8},
|
||||
)
|
||||
|
||||
# pos_only at the beginning of the argument list was "broken" in how it was displayed (though
|
||||
# this is fairly useless in practice). Related to:
|
||||
# https://github.com/pybind/pybind11/pull/3402#issuecomment-963341987
|
||||
assert (
|
||||
m.first_arg_kw_only.pos_only.__doc__
|
||||
== "pos_only(self: pybind11_tests.kwargs_and_defaults.first_arg_kw_only, /, i: int, j: int) -> None\n" # noqa: E501 line too long
|
||||
)
|
||||
|
||||
|
||||
def test_signatures():
|
||||
assert "kw_only_all(*, i: int, j: int) -> tuple\n" == m.kw_only_all.__doc__
|
||||
|
||||
Reference in New Issue
Block a user