diff --git a/numpydoc/docscrape.py b/numpydoc/docscrape.py index 0e0af470..b014967a 100644 --- a/numpydoc/docscrape.py +++ b/numpydoc/docscrape.py @@ -222,12 +222,18 @@ def _read_sections(self): def _parse_param_list(self, content, single_element_is_type=False): content = dedent_lines(content) + r = Reader(content) params = [] while not r.eof(): header = r.read().strip() if " : " in header: - arg_name, arg_type = header.split(" : ", maxsplit=1) + arg_name, arg_type_w_whitespace = header.split(" : ", maxsplit=1) + + # Strip extra spaces from backslash-continued parameter type + # lines. Continuation lines are indented, although we don't know by how + # much. So, we compact any run of 2+ whitespace. + arg_type = re.sub(r"\s{2,}", " ", arg_type_w_whitespace) else: # NOTE: param line with single element should never have a # a " :" before the description line, so this should probably diff --git a/numpydoc/tests/test_docscrape.py b/numpydoc/tests/test_docscrape.py index acf5194c..465d4d95 100644 --- a/numpydoc/tests/test_docscrape.py +++ b/numpydoc/tests/test_docscrape.py @@ -207,6 +207,20 @@ def test_parameters(doc): assert desc[0].startswith("The type and size") +def test_type_continuation(): + doc = NumpyDocString(""" + Parameters + ---------- + foo : a type that goes across \ + multiple lines + This is the description line. + """) + arg, arg_type, desc = doc["Parameters"][0] + assert arg == "foo" + assert arg_type == "a type that goes across multiple lines" + assert desc[0] == "This is the description line." + + def test_other_parameters(doc): assert len(doc["Other Parameters"]) == 1 assert [n for n, _, _ in doc["Other Parameters"]] == ["spam"]