summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpydoc/docscrape.py10
-rw-r--r--numpydoc/tests/test_docscrape.py15
2 files changed, 22 insertions, 3 deletions
diff --git a/numpydoc/docscrape.py b/numpydoc/docscrape.py
index 6bdaa84..9496f9d 100644
--- a/numpydoc/docscrape.py
+++ b/numpydoc/docscrape.py
@@ -226,10 +226,14 @@ class NumpyDocString(Mapping):
params = []
while not r.eof():
header = r.read().strip()
- if " :" in header:
- arg_name, arg_type = header.split(" :", maxsplit=1)
- arg_name, arg_type = arg_name.strip(), arg_type.strip()
+ if " : " in header:
+ arg_name, arg_type = header.split(" : ", maxsplit=1)
else:
+ # NOTE: param line with single element should never have a
+ # a " :" before the description line, so this should probably
+ # warn.
+ if header.endswith(" :"):
+ header = header[:-2]
if single_element_is_type:
arg_name, arg_type = "", header
else:
diff --git a/numpydoc/tests/test_docscrape.py b/numpydoc/tests/test_docscrape.py
index 55ccf92..049d2a2 100644
--- a/numpydoc/tests/test_docscrape.py
+++ b/numpydoc/tests/test_docscrape.py
@@ -980,6 +980,21 @@ doc8 = NumpyDocString(
)
+def test_returns_with_roles_no_names():
+ """Make sure colons that are part of sphinx roles are not misinterpreted
+ as type separator in returns section. See gh-428."""
+ docstring = NumpyDocString(
+ """
+ Returns
+ -------
+ str or :class:`NumpyDocString`
+ """
+ )
+ expected = "str or :class:`NumpyDocString`" # not "str or : class:...
+ assert docstring["Returns"][0].type == expected
+ assert expected in str(docstring)
+
+
def test_trailing_colon():
assert doc8["Parameters"][0].name == "data"