diff options
| author | Rob Ruana <rob@relentlessidiot.com> | 2014-03-09 01:56:56 -0500 |
|---|---|---|
| committer | Rob Ruana <rob@relentlessidiot.com> | 2014-03-09 01:56:56 -0500 |
| commit | 0deddff3813aefd50fb7d853584d0a9330bf063c (patch) | |
| tree | 3754ab9ab99a7abe59c27cabd563df3cf45752e5 | |
| parent | 151838e2749b57816cf29e8d2b9e8fcc665751c7 (diff) | |
| download | sphinx-0deddff3813aefd50fb7d853584d0a9330bf063c.tar.gz | |
Closes #1396: Param types with inline markup no longer italicized
Napoleon was attempting to render nested inline markup
( [a big no-no!](http://sphinx-doc.org/rest.html) ) for
parameter types. Now, if Napoleon sees any backquotes
in the parameter type, it is rendered without italics.
| -rw-r--r-- | doc/ext/napoleon.rst | 8 | ||||
| -rw-r--r-- | sphinx/ext/napoleon/__init__.py | 12 | ||||
| -rw-r--r-- | sphinx/ext/napoleon/docstring.py | 20 | ||||
| -rw-r--r-- | tests/test_napoleon.py | 4 | ||||
| -rw-r--r-- | tests/test_napoleon_docstring.py | 53 |
5 files changed, 79 insertions, 18 deletions
diff --git a/doc/ext/napoleon.rst b/doc/ext/napoleon.rst index 32deecb8..9dda29c6 100644 --- a/doc/ext/napoleon.rst +++ b/doc/ext/napoleon.rst @@ -197,8 +197,8 @@ enabled in `conf.py`:: napoleon_use_admonition_for_notes = False napoleon_use_admonition_for_references = False napoleon_use_ivar = False - napoleon_use_param = False - napoleon_use_rtype = False + napoleon_use_param = True + napoleon_use_rtype = True .. _Google style: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html @@ -328,7 +328,7 @@ enabled in `conf.py`:: True to use a ``:param:`` role for each function parameter. False to use a single ``:parameters:`` role for all the parameters. - *Defaults to False.* + *Defaults to True.* This `NumPy style`_ snippet will be converted as follows:: @@ -356,7 +356,7 @@ enabled in `conf.py`:: .. confval:: napoleon_use_rtype True to use the ``:rtype:`` role for the return type. False to output - the return type inline with the description. *Defaults to False.* + the return type inline with the description. *Defaults to True.* This `NumPy style`_ snippet will be converted as follows:: diff --git a/sphinx/ext/napoleon/__init__.py b/sphinx/ext/napoleon/__init__.py index d3b6f754..08ca0eff 100644 --- a/sphinx/ext/napoleon/__init__.py +++ b/sphinx/ext/napoleon/__init__.py @@ -35,8 +35,8 @@ class Config(object): napoleon_use_admonition_for_notes = False napoleon_use_admonition_for_references = False napoleon_use_ivar = False - napoleon_use_param = False - napoleon_use_rtype = False + napoleon_use_param = True + napoleon_use_rtype = True .. _Google style: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html @@ -152,7 +152,7 @@ class Config(object): Description of `attr1` - napoleon_use_param : bool, defaults to False + napoleon_use_param : bool, defaults to True True to use a ``:param:`` role for each function parameter. False to use a single ``:parameters:`` role for all the parameters. @@ -179,7 +179,7 @@ class Config(object): * **arg2** (*int, optional*) -- Description of `arg2`, defaults to 0 - napoleon_use_rtype : bool, defaults to False + napoleon_use_rtype : bool, defaults to True True to use the ``:rtype:`` role for the return type. False to output the return type inline with the description. @@ -209,8 +209,8 @@ class Config(object): 'napoleon_use_admonition_for_notes': (False, 'env'), 'napoleon_use_admonition_for_references': (False, 'env'), 'napoleon_use_ivar': (False, 'env'), - 'napoleon_use_param': (False, 'env'), - 'napoleon_use_rtype': (False, 'env'), + 'napoleon_use_param': (True, 'env'), + 'napoleon_use_rtype': (True, 'env'), } def __init__(self, **settings): diff --git a/sphinx/ext/napoleon/docstring.py b/sphinx/ext/napoleon/docstring.py index d6c73db8..9ee3b056 100644 --- a/sphinx/ext/napoleon/docstring.py +++ b/sphinx/ext/napoleon/docstring.py @@ -292,11 +292,17 @@ class GoogleDocstring(object): separator = any([s for s in _desc]) and ' --' or '' if _name: if _type: - field = ['**%s** (*%s*)%s' % (_name, _type, separator)] + if '`' in _type: + field = ['**%s** (%s)%s' % (_name, _type, separator)] + else: + field = ['**%s** (*%s*)%s' % (_name, _type, separator)] else: field = ['**%s**%s' % (_name, separator)] elif _type: - field = ['*%s*%s' % (_type, separator)] + if '`' in _type: + field = ['%s%s' % (_type, separator)] + else: + field = ['*%s*%s' % (_type, separator)] else: field = [] return field + _desc @@ -483,11 +489,17 @@ class GoogleDocstring(object): else: _name = ':exc:`%s`' % _name if _type: - field = ['%s (*%s*)%s' % (_name, _type, sep)] + if '`' in _type: + field = ['%s (%s)%s' % (_name, _type, sep)] + else: + field = ['%s (*%s*)%s' % (_name, _type, sep)] else: field = ['%s%s' % (_name, sep)] elif _type: - field = ['*%s*%s' % (_type, sep)] + if '`' in _type: + field = ['%s%s' % (_type, sep)] + else: + field = ['*%s*%s' % (_type, sep)] else: field = [] field = field + _desc diff --git a/tests/test_napoleon.py b/tests/test_napoleon.py index 9ec36efa..e16c02b6 100644 --- a/tests/test_napoleon.py +++ b/tests/test_napoleon.py @@ -84,8 +84,8 @@ class ProcessDocstringTest(TestCase): expected = ['Summary line.', '', - ':Parameters: **arg1** --', - ' arg1 description'] + ':param arg1: arg1 description', + ''] self.assertEqual(expected, lines) diff --git a/tests/test_napoleon_docstring.py b/tests/test_napoleon_docstring.py index aa52aebe..7d5e3ad8 100644 --- a/tests/test_napoleon_docstring.py +++ b/tests/test_napoleon_docstring.py @@ -11,6 +11,7 @@ """ import textwrap +from sphinx.ext.napoleon import Config from sphinx.ext.napoleon.docstring import GoogleDocstring, NumpyDocstring from unittest import TestCase @@ -142,8 +143,9 @@ class GoogleDocstringTest(BaseDocstringTest): )] def test_docstrings(self): + config = Config(napoleon_use_param=False, napoleon_use_rtype=False) for docstring, expected in self.docstrings: - actual = str(GoogleDocstring(textwrap.dedent(docstring))) + actual = str(GoogleDocstring(textwrap.dedent(docstring), config)) expected = textwrap.dedent(expected) self.assertEqual(expected, actual) @@ -253,7 +255,54 @@ class NumpyDocstringTest(BaseDocstringTest): )] def test_docstrings(self): + config = Config(napoleon_use_param=False, napoleon_use_rtype=False) for docstring, expected in self.docstrings: - actual = str(NumpyDocstring(textwrap.dedent(docstring))) + actual = str(NumpyDocstring(textwrap.dedent(docstring), config)) expected = textwrap.dedent(expected) self.assertEqual(expected, actual) + + def test_parameters_with_class_reference(self): + docstring = """ + Parameters + ---------- + param1 : :class:`MyClass <name.space.MyClass>` instance + + """ + + config = Config(napoleon_use_param=False) + actual = str(NumpyDocstring(textwrap.dedent(docstring), config)) + expected = textwrap.dedent(""" + :Parameters: **param1** (:class:`MyClass <name.space.MyClass>` instance) + """) + self.assertEqual(expected, actual) + + config = Config(napoleon_use_param=True) + actual = str(NumpyDocstring(textwrap.dedent(docstring), config)) + expected = textwrap.dedent(""" + + :type param1: :class:`MyClass <name.space.MyClass>` instance + """) + self.assertEqual(expected, actual) + + def test_parameters_without_class_reference(self): + docstring = """ + Parameters + ---------- + param1 : MyClass instance + + """ + + config = Config(napoleon_use_param=False) + actual = str(NumpyDocstring(textwrap.dedent(docstring), config)) + expected = textwrap.dedent(""" + :Parameters: **param1** (*MyClass instance*) + """) + self.assertEqual(expected, actual) + + config = Config(napoleon_use_param=True) + actual = str(NumpyDocstring(textwrap.dedent(docstring), config)) + expected = textwrap.dedent(""" + + :type param1: MyClass instance + """) + self.assertEqual(expected, actual) |
