Incorrect data type definition for attributes without annotation
dd opened this issue · 3 comments
If a method contains an attribute without an annotation among its attributes, the data type will be inherited from the previous one.
For example, this will actively occur for the *args and **kwargs attributes:
def foo(bar: str, *args, baz: bool=True, qux="quux", **kwargs):
"""
Foo method
"""
pass
Please note that the qux attribute also inherited the data type from the previous one
Expected behavior
I think it is obvious that the data type should not be inherited from the previous attribute.
I also think that for attributes like */** the default data type can be tuple and dict, respectively.
System (please complete the following information):
mkdocstrings-python
: 1.7.0- Python version: 3.11
- OS: Linux
Thanks for the report! It looks like Griffe is correctly collecting data, so I suspect the issue happens in the Python handler where loop variable isn't reset. I'll fix this ASAP 🙂
I also think that for attributes like /* the default data type can be tuple and dict, respectively.
Not really. *args
and **kwargs
are tuples and dicts respectively, sure, but tools expect to find their inner element type as annotation: *args: float
or **kwargs: set[int]
. It means we can't compute a default type annotation, and it will stay empty if the user didn't provide one.
I have seen this behavior as well. Looking forward to a fix.