summaryrefslogtreecommitdiff
path: root/astroid/brain/brain_qt.py
diff options
context:
space:
mode:
Diffstat (limited to 'astroid/brain/brain_qt.py')
-rw-r--r--astroid/brain/brain_qt.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/astroid/brain/brain_qt.py b/astroid/brain/brain_qt.py
new file mode 100644
index 0000000..f568b65
--- /dev/null
+++ b/astroid/brain/brain_qt.py
@@ -0,0 +1,44 @@
+"""Astroid hooks for the PyQT library."""
+
+from astroid import MANAGER, register_module_extender
+from astroid.builder import AstroidBuilder
+from astroid import nodes
+from astroid import parse
+
+
+def _looks_like_signal(node, signal_name='pyqtSignal'):
+ if '__class__' in node.instance_attrs:
+ cls = node.instance_attrs['__class__'][0]
+ return cls.name == signal_name
+ return False
+
+
+def transform_pyqt_signal(node):
+ module = parse('''
+ class pyqtSignal(object):
+ def connect(self, slot, type=None, no_receiver_check=False):
+ pass
+ def disconnect(self, slot):
+ pass
+ def emit(self, *args):
+ pass
+ ''')
+ signal_cls = module['pyqtSignal']
+ node.instance_attrs['emit'] = signal_cls['emit']
+ node.instance_attrs['disconnect'] = signal_cls['disconnect']
+ node.instance_attrs['connect'] = signal_cls['connect']
+
+
+def pyqt4_qtcore_transform():
+ return AstroidBuilder(MANAGER).string_build('''
+
+def SIGNAL(signal_name): pass
+
+class QObject(object):
+ def emit(self, signal): pass
+''')
+
+
+register_module_extender(MANAGER, 'PyQt4.QtCore', pyqt4_qtcore_transform)
+MANAGER.register_transform(nodes.FunctionDef, transform_pyqt_signal,
+ _looks_like_signal) \ No newline at end of file