diff --git a/.gitignore b/.gitignore index 13a4a63709..a5d0a6318d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ astroid.egg-info/ .pytest_cache/ .mypy_cache/ venv +doc/_build/ diff --git a/ChangeLog b/ChangeLog index 75561c9ba6..22e0880722 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,10 @@ What's New in astroid 2.12.0? ============================= Release date: TBA +* Fix signal has no ``connect`` member for PySide2 5.15.2+ and PySide6 + + Closes #4040, #5378 + * ``astroid`` now requires Python 3.7.2 to run. * Avoid setting a Call as a base for classes created using ``six.with_metaclass()``. diff --git a/astroid/brain/brain_qt.py b/astroid/brain/brain_qt.py index 6b97bf671a..e8bfe88fd1 100644 --- a/astroid/brain/brain_qt.py +++ b/astroid/brain/brain_qt.py @@ -10,12 +10,18 @@ from astroid.manager import AstroidManager -def _looks_like_signal(node, signal_name="pyqtSignal"): - if "__class__" in node.instance_attrs: +def _looks_like_signal( + node: nodes.FunctionDef, signal_name: str = "pyqtSignal" +) -> bool: + """Detect a Signal node.""" + klasses = node.instance_attrs.get("__class__", []) + # On PySide2 or PySide6 (since Qt 5.15.2) the Signal class changed locations + if node.qname().partition(".")[0] in {"PySide2", "PySide6"}: + return any(cls.qname() == "Signal" for cls in klasses) # pragma: no cover + if klasses: try: - cls = node.instance_attrs["__class__"][0] - return cls.name == signal_name - except AttributeError: + return klasses[0].name == signal_name + except AttributeError: # pragma: no cover # return False if the cls does not have a name attribute pass return False diff --git a/script/.contributors_aliases.json b/script/.contributors_aliases.json index 60fabfa86e..2b3c6d877e 100644 --- a/script/.contributors_aliases.json +++ b/script/.contributors_aliases.json @@ -169,5 +169,9 @@ "ville.skytta@iki.fi": { "mails": ["ville.skytta@iki.fi", "ville.skytta@upcloud.com"], "name": "Ville Skyttä" + }, + "adam.grant.hendry@gmail.com": { + "mails": ["adam.grant.hendry@gmail.com"], + "name": "Adam Hendry" } } diff --git a/tests/unittest_brain_qt.py b/tests/unittest_brain_qt.py index 93ef4dd110..7e10db70ba 100644 --- a/tests/unittest_brain_qt.py +++ b/tests/unittest_brain_qt.py @@ -14,7 +14,7 @@ HAS_PYQT6 = find_spec("PyQt6") -@pytest.mark.skipif(HAS_PYQT6 is None, reason="This test requires the PyQt6 library.") +@pytest.mark.skipif(HAS_PYQT6 is None, reason="These tests require the PyQt6 library.") class TestBrainQt: AstroidManager.brain["extension_package_whitelist"] = {"PyQt6"}