Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-03-28 14:22:16 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2023-03-28 15:59:39 +0200
commita587de6ca1658286eba55ee37a9d64f6ad530d30 (patch)
tree309db19ddf0f60e0e235f2d33cb1dd2fefe8a9e8 /tools/snippets_translate
parent4c84f72846bc25ea56c56175b99dd6b39c54e6cb (diff)
snippets_translate: Improve connect handling
Extend the matching to recognize connects for member variables (m_ui.button), remove smart pointer accessor. Pick-to: 6.5 Task-number: PYSIDE-1106 Change-Id: Ib68df3d9d31a8de64059832c4c60ad4b20bf78e1 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'tools/snippets_translate')
-rw-r--r--tools/snippets_translate/handlers.py15
-rw-r--r--tools/snippets_translate/tests/test_converter.py15
2 files changed, 27 insertions, 3 deletions
diff --git a/tools/snippets_translate/handlers.py b/tools/snippets_translate/handlers.py
index b62f8a874..9e590c536 100644
--- a/tools/snippets_translate/handlers.py
+++ b/tools/snippets_translate/handlers.py
@@ -555,13 +555,19 @@ def handle_new(x):
INSTANCE_PMF_RE = re.compile(r"&?(\w+),\s*&\w+::(\w+)")
-CONNECT_RE = re.compile(r"^(\s*)(QObject::)?connect\((\w+\.\w+),\s*")
+CONNECT_RE = re.compile(r"^(\s*)(QObject::)?connect\(([A-Za-z0-9_\.]+),\s*")
-def handle_qt_connects(line):
- if not INSTANCE_PMF_RE.search(line):
+def handle_qt_connects(line_in):
+ if not INSTANCE_PMF_RE.search(line_in):
return None
# 1st pass, "fontButton, &QAbstractButton::clicked" -> "fontButton.clicked"
+
+ is_connect = "connect(" in line_in
+ line = line_in
+ # Remove any smart pointer access, etc in connect statements
+ if is_connect:
+ line = line.replace(".get()", "").replace(".data()", "").replace("->", ".")
last_pos = 0
result = ""
for match in INSTANCE_PMF_RE.finditer(line):
@@ -575,6 +581,9 @@ def handle_qt_connects(line):
result += f"{instance}.{member_fun}"
result += line[last_pos:]
+ if not is_connect:
+ return result
+
# 2nd pass, reorder connect.
connect_match = CONNECT_RE.match(result)
if not connect_match:
diff --git a/tools/snippets_translate/tests/test_converter.py b/tools/snippets_translate/tests/test_converter.py
index 360cb157e..15c42cebc 100644
--- a/tools/snippets_translate/tests/test_converter.py
+++ b/tools/snippets_translate/tests/test_converter.py
@@ -112,6 +112,21 @@ def test_double_colon():
assert st("this, &MyClass::slotError);") == "self.slotError)"
+def test_connects():
+ assert (
+ st("connect(button, &QPushButton::clicked, this, &MyClass::slotClicked);")
+ == "button.clicked.connect(self.slotClicked)"
+ )
+ assert (
+ st("connect(m_ui->button, &QPushButton::clicked, this, &MyClass::slotClicked);")
+ == "m_ui.button.clicked.connect(self.slotClicked)"
+ )
+ assert (
+ st("connect(button.get(), &QPushButton::clicked, this, &MyClass::slotClicked);")
+ == "button.clicked.connect(self.slotClicked)"
+ )
+
+
def test_cout_endl():
assert st("cout << 'hello' << 'world' << endl") == "print('hello', 'world')"
assert st(" cout << 'hallo' << 'welt' << endl") == " print('hallo', 'welt')"