translate the functions before attempting to find a matching role

This commit is contained in:
Keewis 2020-08-06 14:08:34 +02:00
parent ca0bd28681
commit 4428393403
2 changed files with 54 additions and 0 deletions

View File

@ -1175,6 +1175,22 @@ class NumpyDocstring(GoogleDocstring):
return None
def translate(func, description, role):
translations = self._config.napoleon_type_aliases
if role is not None or not translations:
return func, description, role
translated = translations.get(func, func)
match = self._name_rgx.match(translated)
if not match:
return translated, description, role
groups = match.groupdict()
role = groups["role"]
new_func = groups["name"] or groups["name2"]
return new_func, description, role
current_func = None
rest = [] # type: List[str]
@ -1205,6 +1221,12 @@ class NumpyDocstring(GoogleDocstring):
if not items:
return []
# apply type aliases
items = [
translate(func, description, role)
for func, description, role in items
]
roles = {
'method': 'meth',
'meth': 'meth',

View File

@ -1400,6 +1400,38 @@ numpy.multivariate_normal(mean, cov, shape=None, spam=None)
"""
self.assertEqual(expected, actual)
docstring = """\
numpy.multivariate_normal(mean, cov, shape=None, spam=None)
See Also
--------
some, other, :func:`funcs`
otherfunc : relationship
"""
translations = {
"other": "MyClass.other",
"otherfunc": ":func:`~my_package.otherfunc`",
}
config = Config(napoleon_type_aliases=translations)
app = mock.Mock()
app.builder.env.intersphinx_inventory = {
"py:func": {"funcs": (), "otherfunc": ()},
"py:meth": {"some": (), "MyClass.other": ()},
}
actual = str(NumpyDocstring(docstring, config, app, "method"))
expected = """\
numpy.multivariate_normal(mean, cov, shape=None, spam=None)
.. seealso::
:meth:`some`, :meth:`MyClass.other`, :func:`funcs`
\n\
:func:`~my_package.otherfunc`
relationship
"""
self.assertEqual(expected, actual)
def test_colon_in_return_type(self):
docstring = """