mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
92 lines
2.3 KiB
Python
92 lines
2.3 KiB
Python
"""Migrate signals from old style to new style
|
|
"""
|
|
|
|
# Author: Juergen E. Fischer
|
|
|
|
# .connect( sender, signal, receiver, slot )
|
|
|
|
import re
|
|
|
|
# Local imports
|
|
from lib2to3 import fixer_base, pytree
|
|
from lib2to3.fixer_util import ArgList, Attr, Call, Name, Node, syms
|
|
|
|
|
|
class FixSignals(fixer_base.BaseFix):
|
|
PATTERN = """
|
|
(
|
|
power<
|
|
any trailer< '.' method=('connect'|'disconnect') >
|
|
trailer<
|
|
'('
|
|
arglist<
|
|
sender=any ','
|
|
power< 'SIGNAL' trailer< '(' signal=any ')' > > ','
|
|
slot=any
|
|
>
|
|
')'
|
|
>
|
|
>
|
|
|
|
|
power<
|
|
emitter=any trailer< '.' 'emit' >
|
|
trailer<
|
|
'('
|
|
args=arglist<
|
|
power< 'SIGNAL' trailer< '(' signal=any ')' > >
|
|
( ',' any )*
|
|
>
|
|
')'
|
|
>
|
|
>
|
|
|
|
|
power<
|
|
emitter=any trailer< '.' 'emit' >
|
|
trailer<
|
|
'('
|
|
args=power< 'SIGNAL' trailer< '(' signal=any ')' > >
|
|
')'
|
|
>
|
|
>
|
|
)
|
|
"""
|
|
|
|
# def match(self, node):
|
|
# res = super(FixSignals, self).match( node )
|
|
# r = repr(node)
|
|
# if "emit" in r:
|
|
# print "yes" if res else "no", ": ", r
|
|
# return res
|
|
|
|
def transform(self, node, results):
|
|
signal = results.get("signal").value
|
|
signal = re.sub("^[\"']([^(]+)(?:\\(.*\\))?[\"']$", "\\1", signal)
|
|
|
|
if "emitter" in results:
|
|
emitter = results.get("emitter").clone()
|
|
emitter.prefix = node.prefix
|
|
args = results.get("args").clone()
|
|
args.children = args.children[2:]
|
|
if args.children:
|
|
args.children[0].prefix = ""
|
|
res = Node(
|
|
syms.power,
|
|
[emitter, Name("."), Name(signal), Name("."), Name("emit")]
|
|
+ [ArgList([args])],
|
|
)
|
|
else:
|
|
sender = results.get("sender").clone()
|
|
method = results.get("method")
|
|
if isinstance(method, list):
|
|
method = method[0]
|
|
method = method.clone()
|
|
sender.prefix = node.prefix
|
|
slot = results.get("slot").clone()
|
|
slot.prefix = ""
|
|
res = Node(
|
|
syms.power,
|
|
[sender, Name("."), Name(signal), Name("."), method]
|
|
+ [ArgList([slot])],
|
|
)
|
|
return res
|