Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion numpydoc/docscrape.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,12 +222,23 @@ 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)
N = len(arg_name)

# This strips spaces that arose from
# backslash-continued lines. Unfortunately, we don't
# know the offset of the original docstring, and
# therefore also not the number of spaces introduced
# by the continued line. However, we can set a lower
# bound: length of the parameter, plus three (for
# space-colon-space).
arg_type = re.sub(rf" {{{N + 3},}}", " ", arg_type_w_whitespace)
else:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may not be following entirely but this seems wrong to me? Can it deal with the formatting below, where arg_name is quite long?

"""
Parameters
----------
very_long_arg_name : type wrapped \
        over multiple lines
    Description goes here.
"""

Why not just use

re.sub(r"\s{2,}", " ", arg_type_w_whitespace)

\s should also be able to deal with non-breaking spaces and such.

# NOTE: param line with single element should never have a
# a " :" before the description line, so this should probably
Expand Down
14 changes: 14 additions & 0 deletions numpydoc/tests/test_docscrape.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down