mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge pull request #7799 from keewis/escape-combined-args-kwargs
Escape combined args kwargs
This commit is contained in:
commit
64a26ff4de
@ -22,12 +22,13 @@ from sphinx.ext.napoleon.iterators import modify_iter
|
|||||||
from sphinx.locale import _, __
|
from sphinx.locale import _, __
|
||||||
from sphinx.util import logging
|
from sphinx.util import logging
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
# For type annotation
|
# For type annotation
|
||||||
from typing import Type # for python3.5.1
|
from typing import Type # for python3.5.1
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
_directive_regex = re.compile(r'\.\. \S+::')
|
_directive_regex = re.compile(r'\.\. \S+::')
|
||||||
_google_section_regex = re.compile(r'^(\s|\w)+:\s*$')
|
_google_section_regex = re.compile(r'^(\s|\w)+:\s*$')
|
||||||
_google_typed_arg_regex = re.compile(r'\s*(.+?)\s*\(\s*(.*[^\s]+)\s*\)')
|
_google_typed_arg_regex = re.compile(r'\s*(.+?)\s*\(\s*(.*[^\s]+)\s*\)')
|
||||||
@ -1075,14 +1076,24 @@ class NumpyDocstring(GoogleDocstring):
|
|||||||
super().__init__(docstring, config, app, what, name, obj, options)
|
super().__init__(docstring, config, app, what, name, obj, options)
|
||||||
|
|
||||||
def _get_location(self) -> str:
|
def _get_location(self) -> str:
|
||||||
filepath = inspect.getfile(self._obj) if self._obj is not None else ""
|
filepath = inspect.getfile(self._obj) if self._obj is not None else None
|
||||||
name = self._name
|
name = self._name
|
||||||
|
|
||||||
if filepath is None and name is None:
|
if filepath is None and name is None:
|
||||||
return None
|
return None
|
||||||
|
elif filepath is None:
|
||||||
|
filepath = ""
|
||||||
|
|
||||||
return ":".join([filepath, "docstring of %s" % name])
|
return ":".join([filepath, "docstring of %s" % name])
|
||||||
|
|
||||||
|
def _escape_args_and_kwargs(self, name: str) -> str:
|
||||||
|
func = super()._escape_args_and_kwargs
|
||||||
|
|
||||||
|
if ", " in name:
|
||||||
|
return ", ".join(func(param) for param in name.split(", "))
|
||||||
|
else:
|
||||||
|
return func(name)
|
||||||
|
|
||||||
def _consume_field(self, parse_type: bool = True, prefer_type: bool = False
|
def _consume_field(self, parse_type: bool = True, prefer_type: bool = False
|
||||||
) -> Tuple[str, str, List[str]]:
|
) -> Tuple[str, str, List[str]]:
|
||||||
line = next(self._line_iter)
|
line = next(self._line_iter)
|
||||||
|
@ -16,6 +16,8 @@ from inspect import cleandoc
|
|||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
from unittest import TestCase, mock
|
from unittest import TestCase, mock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from sphinx.ext.napoleon import Config
|
from sphinx.ext.napoleon import Config
|
||||||
from sphinx.ext.napoleon.docstring import GoogleDocstring, NumpyDocstring
|
from sphinx.ext.napoleon.docstring import GoogleDocstring, NumpyDocstring
|
||||||
from sphinx.ext.napoleon.docstring import (
|
from sphinx.ext.napoleon.docstring import (
|
||||||
@ -1218,6 +1220,23 @@ class NumpyDocstringTest(BaseDocstringTest):
|
|||||||
"""
|
"""
|
||||||
Single line summary
|
Single line summary
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
arg1:str
|
||||||
|
Extended description of arg1
|
||||||
|
*args, **kwargs:
|
||||||
|
Variable length argument list and arbitrary keyword arguments.
|
||||||
|
""",
|
||||||
|
"""
|
||||||
|
Single line summary
|
||||||
|
|
||||||
|
:Parameters: * **arg1** (*str*) -- Extended description of arg1
|
||||||
|
* **\\*args, \\*\\*kwargs** -- Variable length argument list and arbitrary keyword arguments.
|
||||||
|
"""
|
||||||
|
), (
|
||||||
|
"""
|
||||||
|
Single line summary
|
||||||
|
|
||||||
Yield
|
Yield
|
||||||
-----
|
-----
|
||||||
str
|
str
|
||||||
@ -2182,6 +2201,7 @@ definition_after_normal_text : int
|
|||||||
actual = str(NumpyDocstring(docstring, config))
|
actual = str(NumpyDocstring(docstring, config))
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def warns(warning, match):
|
def warns(warning, match):
|
||||||
match_re = re.compile(match)
|
match_re = re.compile(match)
|
||||||
@ -2216,3 +2236,17 @@ class TestNumpyDocstring:
|
|||||||
for token, error in zip(tokens, errors):
|
for token, error in zip(tokens, errors):
|
||||||
with warns(warning, match=error):
|
with warns(warning, match=error):
|
||||||
_token_type(token)
|
_token_type(token)
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("name", "expected"),
|
||||||
|
(
|
||||||
|
("x, y, z", "x, y, z"),
|
||||||
|
("*args, **kwargs", r"\*args, \*\*kwargs"),
|
||||||
|
("*x, **y", r"\*x, \*\*y"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_escape_args_and_kwargs(self, name, expected):
|
||||||
|
numpy_docstring = NumpyDocstring("")
|
||||||
|
actual = numpy_docstring._escape_args_and_kwargs(name)
|
||||||
|
|
||||||
|
assert actual == expected
|
||||||
|
Loading…
Reference in New Issue
Block a user