{% for param in function.params %}
{% if loop.index != 1 or param.name != 'self' or param.content %}
<tr>
- <td{% if loop.index == 1 %} style="width: 1%"{% endif %}>{{ param.name }}</td>
+ <td{% if loop.index == 1 or loop.index == 2 and function.params[loop.index0 - 1].name == 'self' %} style="width: 1%"{% endif %}>{{ param.name }}</td>
<td>{{ param.content }}</td>
</tr>
{% endif %}
</thead>
<tbody>
<tr>
- <td>a</td>
+ <td style="width: 1%">a</td>
<td>The first parameter</td>
</tr>
<tr>
--- /dev/null
+.. py:property:: inspect_attrs.MyClass.unannotated
+ :summary: External docs for this property
+
+.. py:property:: inspect_attrs.MyClassAutoAttribs.complex_annotation
+ :summary: This is complex.
+
+.. py:data:: inspect_attrs.MySlotClass.annotated
+ :summary: This is a float slot.
+
+.. py:function:: inspect_attrs.MyClass.__init__
+ :summary: External docs for the init
+ :param annotated: The first argument
+ :param unannotated: This gets the default of four
+ :param complex_annotation: Yes, a list
+ :param hidden_property: Interesting, but I don't care.
+
+ The :p:`hidden_property` isn't shown in the output as it's prefixed with
+ an underscore.
--- /dev/null
+from typing import List, Tuple
+
+import attr
+
+@attr.s
+class MyClass:
+ """A class with attr-defined properties"""
+
+ annotated: float = attr.ib()
+ unannotated = attr.ib(4)
+ complex_annotation: List[Tuple[int, float]] = attr.ib(default=[])
+
+ # Shouldn't be shown
+ _hidden_property: float = attr.ib(3)
+
+@attr.s(auto_attribs=True)
+class MyClassAutoAttribs:
+ """A class with automatic attr-defined properties"""
+
+ annotated: float
+ unannotated = 4
+ complex_annotation: List[Tuple[int, float]] = []
+
+@attr.s(auto_attribs=True, slots=True)
+class MySlotClass:
+ """A class with attr-defined slots"""
+
+ annotated: float
+ complex_annotation: List[Tuple[int, float]] = []