Skip to content

Commit 60ac6cc

Browse files
committed
BUG: Fix dataclass attributes are instance vars
Fixes #378
1 parent 4c9de5d commit 60ac6cc

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

pdoc/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import typing
2020
from contextlib import contextmanager
2121
from copy import copy
22+
from dataclasses import is_dataclass
2223
from functools import cached_property, lru_cache, reduce, partial, wraps
2324
from itertools import tee, groupby
2425
from types import FunctionType, ModuleType
@@ -1097,7 +1098,8 @@ def definition_order_index(
10971098
kind="prop" if isinstance(obj, property) else "var",
10981099
obj=_is_descriptor(obj) and obj or None,
10991100
instance_var=(_is_descriptor(obj) or
1100-
name in getattr(self.obj, '__slots__', ())))
1101+
name in getattr(self.obj, '__slots__', ()) or
1102+
(is_dataclass(self.obj) and name in annotations)))
11011103

11021104
for name, docstring in instance_var_docstrings.items():
11031105
self.doc[name] = Variable(

pdoc/test/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import unittest
1515
import warnings
1616
from contextlib import contextmanager, redirect_stderr, redirect_stdout
17+
from dataclasses import dataclass
1718
from functools import wraps
1819
from glob import glob
1920
from io import StringIO
@@ -1788,5 +1789,16 @@ def test_head(self):
17881789
self.assertEqual(cm.exception.code, 304)
17891790

17901791

1792+
class RegressionsTest(unittest.TestCase):
1793+
def test_dataclass_has_instance_vars(self):
1794+
@dataclass
1795+
class Foo:
1796+
bar: int #: baz
1797+
1798+
obj = pdoc.Class(Foo.__name__, pdoc.Module(EMPTY_MODULE), Foo)
1799+
self.assertTrue(obj.doc['bar'].instance_var)
1800+
self.assertEqual(obj.doc['bar'].docstring, 'baz')
1801+
1802+
17911803
if __name__ == '__main__':
17921804
unittest.main()

0 commit comments

Comments
 (0)