Package: pylint Version: 2.4.4-2 Severity: normal Dear Maintainer,
pyreverse fails to parse python code that contains dataclasses. It is simple to reproduce the problem with a simple python file containing only: from dataclasses import dataclass @dataclass class Data: a: int running pyreverse with no option on this file leads to the following error: parsing pyrevbug.py... Traceback (most recent call last): File "/usr/bin/pyreverse", line 11, in <module> load_entry_point('pylint==2.4.4', 'console_scripts', 'pyreverse')() File "/usr/lib/python3/dist-packages/pylint/__init__.py", line 37, in run_pyreverse PyreverseRun(sys.argv[1:]) File "/usr/lib/python3/dist-packages/pylint/pyreverse/main.py", line 184, in __init__ sys.exit(self.run(args)) File "/usr/lib/python3/dist-packages/pylint/pyreverse/main.py", line 202, in run diadefs = handler.get_diadefs(project, linker) File "/usr/lib/python3/dist-packages/pylint/pyreverse/diadefslib.py", line 235, in get_diadefs diagrams = DefaultDiadefGenerator(linker, self).visit(project) File "/usr/lib/python3/dist-packages/pylint/pyreverse/utils.py", line 217, in visit self.visit(local_node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/utils.py", line 217, in visit self.visit(local_node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/utils.py", line 214, in visit methods[0](node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/diadefslib.py", line 169, in visit_classdef self.extract_classes(node, anc_level, association_level) File "/usr/lib/python3/dist-packages/pylint/pyreverse/diadefslib.py", line 113, in extract_classes self.add_class(klass_node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/diadefslib.py", line 83, in add_class self.linker.visit(node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/utils.py", line 214, in visit methods[0](node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/inspector.py", line 166, in visit_classdef self.handle_assignattr_type(assignattr, node) File "/usr/lib/python3/dist-packages/pylint/pyreverse/inspector.py", line 232, in handle_assignattr_type current = set(parent.instance_attrs_type[node.attrname]) AttributeError: 'Unknown' object has no attribute 'attrname' Note that pyreverse3 of the buster version of pylint3 works correctly. Cordially, Raphaƫl -- System Information: Debian Release: bullseye/sid APT prefers unstable APT policy: (500, 'unstable'), (500, 'testing'), (500, 'oldstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 5.4.0-4-amd64 (SMP w/4 CPU cores) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE=fr:en_GB (charmap=UTF-8) Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages pylint depends on: ii python3 3.7.5-3 ii python3-astroid 2.3.3-1 ii python3-isort 4.3.4+ds1-2 ii python3-logilab-common 1.4.3-2 ii python3-mccabe 0.6.1-3 ii python3-setuptools 44.0.0-1 Versions of packages pylint recommends: ii python3-tk 3.8.2-2 Versions of packages pylint suggests: ii pylint-doc 2.4.4-2 -- no debconf information