diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-03-28 14:22:16 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-03-28 15:59:39 +0200 |
commit | a587de6ca1658286eba55ee37a9d64f6ad530d30 (patch) | |
tree | 309db19ddf0f60e0e235f2d33cb1dd2fefe8a9e8 /tools/snippets_translate | |
parent | 4c84f72846bc25ea56c56175b99dd6b39c54e6cb (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.py | 15 | ||||
-rw-r--r-- | tools/snippets_translate/tests/test_converter.py | 15 |
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')" |