pybind / pybind/pybind11

[BUG]: Use of pybind11::args or pybind11::kw_only results in a Sphinx warning due to the use of *

Open
#4,537 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement help wanted signatures
Dominant language
C++
Stars
18k
Forks
2.3k
Avg merge
5d 17h
Merged PRs (30d)
10

Description

Required prerequisites
What version (or hash if on master) of pybind11 are you using?

3cc7e4258c15a6a19ba5e0b62a220b1a6196d4eb

Problem description

The function initialize_generic in pybind11.h adds the signature of overloads as part of the docs string if show_function_signatures is true. This signature is not marked as code and hence any use of * in that signature are not correctly interpreted by sphinx, causing an "Inline emphasis start-string without end-string" warning.

A minimal fix is changing this line to

signatures += std::regex_replace(std::string(it->signature), std::regex("\\*"), "\\*"); // making sure * are escaped

Alternatively, the name + signature could also be surrounded by a code block or inline code markers.
The nicest IMO would be for the signatures to be presented in the same style that member functions of a class are, though I don't know how that would need to be done.

Reproducible example code
void createBinding(pybind11::module &m) {

  m.def("foo", [&](pybind11::args args) {
    // ...;
  });
}
Is this a regression? Put the last known working version here if it is.

Not a regression

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in include/pybind11/pybind11.h around line 582, where initialize_generic adds overload signatures when show_function_signatures is enabled. Reproduce the warning with the provided pybind11::args example and inspect how the generated signature is passed to Sphinx. Done means signatures containing * are rendered without an "Inline emphasis start-string without end-string" warning.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, python
Domain
documentation
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.