mkdocstrings/python

Incorrect data type definition for attributes without annotation

dd opened this issue · 3 comments

dd commented

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

image
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.

waylan commented

I have seen this behavior as well. Looking forward to a fix.