pybind/pybind11

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

Open

#4537 aperta il 27 feb 2023

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)C++ (2005 fork)batch import
enhancementhelp wantedsignatures

Metriche repository

Star
 (14.677 star)
Metriche merge PR
 (Merge medio 5g 2h) (10 PR mergiate in 30 g)

Descrizione

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

Guida contributor