Skip to content

Commit b81c93e

Browse files
authored
fix: Fix parsing of *args and **kwargs (#21)
The inspect library stores the *args and **kwargs parameters under the keys args and kwargs respectively. This behavior caused a key error when looking for the parameters using the *args and **kwargs keys.
1 parent 66fac67 commit b81c93e

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/pytkdocs/parsers/docstrings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def read_parameters_section(self, lines: List[str], start_index: int) -> Tuple[O
303303
kind = None
304304

305305
try:
306-
signature_param = self.signature.parameters[name] # type: ignore
306+
signature_param = self.signature.parameters[name.lstrip("*")] # type: ignore
307307
except (AttributeError, KeyError):
308308
self.parsing_errors.append(f"{self.path}: No type annotation for parameter '{name}'")
309309
else:

tests/test_parsers/test_docstrings.py

+18
Original file line numberDiff line numberDiff line change
@@ -344,3 +344,21 @@ def f(p: str, q: str):
344344
sections, errors = parse(inspect.getdoc(f), inspect.signature(f))
345345
assert len(sections) == 2
346346
assert not errors
347+
348+
def test_parse_args_kwargs(self):
349+
def f(a, *args, **kwargs):
350+
"""
351+
Arguments:
352+
a: a parameter.
353+
*args: args parameters.
354+
**kwargs: kwargs parameters.
355+
"""
356+
return 1
357+
358+
sections, errors = parse(inspect.getdoc(f), inspect.signature(f))
359+
assert len(sections) == 1
360+
expected_parameters = {"a": "a parameter.", "*args": "args parameters.", "**kwargs": "kwargs parameters."}
361+
for param in sections[0].value:
362+
assert param.name in expected_parameters
363+
assert expected_parameters[param.name] == param.description
364+
assert not errors

0 commit comments

Comments
 (0)