aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorOlivier De Cannière <[email protected]>2025-05-28 15:00:38 +0200
committerOlivier De Cannière <[email protected]>2025-05-30 22:25:39 +0200
commit2e00bc40cce9286dcb1ef9ff88845778c316592c (patch)
tree3806195ff655f2c41443748d4da8229d8c3b3ef6 /tests
parentafc5a1c6f49e33cee07d098728e3c0702e95d168 (diff)
qmllint: Warn about unintentional empty blocksHEADdev
If a property binding is a js block without any statements, it could mean that the user intended to create an object literal instead of an empty block that returns undefined. Task-number: QTBUG-129307 Change-Id: If242ddac140cce6479062194b785096ba1f6c0a6 Reviewed-by: Fabian Kosmale <[email protected]>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qmllint/data/qdsPlugin/SupportedBlock.ui.qml2
-rw-r--r--tests/auto/qml/qmllint/tst_qmllint.cpp21
2 files changed, 17 insertions, 6 deletions
diff --git a/tests/auto/qml/qmllint/data/qdsPlugin/SupportedBlock.ui.qml b/tests/auto/qml/qmllint/data/qdsPlugin/SupportedBlock.ui.qml
index 3cb5ed14cc..0294ef6329 100644
--- a/tests/auto/qml/qmllint/data/qdsPlugin/SupportedBlock.ui.qml
+++ b/tests/auto/qml/qmllint/data/qdsPlugin/SupportedBlock.ui.qml
@@ -2,7 +2,7 @@ import QtQuick
Connections {
property int ok: 123
- property int evilBlock: {}
+ property int evilBlock: { 1 }
property var evilLambda: function() {}
property var evilFunction: function hello() {}
property var evilArrow: x => x
diff --git a/tests/auto/qml/qmllint/tst_qmllint.cpp b/tests/auto/qml/qmllint/tst_qmllint.cpp
index d2d94b757d..16adcf83fd 100644
--- a/tests/auto/qml/qmllint/tst_qmllint.cpp
+++ b/tests/auto/qml/qmllint/tst_qmllint.cpp
@@ -1462,16 +1462,18 @@ void TestQmllint::dirtyQmlSnippet_data()
<< u"property int qwer: \"Hello\""_s
<< Result{ { { "Cannot assign literal of type string to int"_L1 } } }
<< defaultOptions;
-
- QTest::newRow("uselessExpressionStatement")
- << u"property int i: { let x = 0; 0 + 1; return i + 3; }"_s
- << Result{ { { "Expression statement has no obvious effect."_L1, 1, 30 } } }
+ QTest::newRow("unintentionalEmptyBlock-dirty")
+ << u"property var v: {}"_s
+ << Result{ { { "Unintentional empty block, use ({}) for empty object literal"_L1, 1, 17 } } }
<< defaultOptions;
-
QTest::newRow("upperCaseId")
<< u"id: Root"_s
<< Result{ { { "Id must start with a lower case letter or an '_'"_L1, 1, 5 } } }
<< defaultOptions;
+ QTest::newRow("uselessExpressionStatement")
+ << u"property int i: { let x = 0; 0 + 1; return i + 3; }"_s
+ << Result{ { { "Expression statement has no obvious effect."_L1, 1, 30 } } }
+ << defaultOptions;
}
void TestQmllint::dirtyQmlSnippet()
@@ -1532,6 +1534,15 @@ void TestQmllint::cleanQmlSnippet_data()
<< u"Item { component Foo: Item { required property var bla; } }"_s << defaultOptions;
QTest::newRow("testSnippet") << u"property int qwer: 123"_s << defaultOptions;
QTest::newRow("underScoreId") << u"id: _Root"_s << defaultOptions;
+ QTest::newRow("unintentionalEmptyBlock-clean")
+ << uR"(
+ property var p1: ({})
+ property var p2: {
+ {}
+ return {}
+ }
+ )"_s
+ << defaultOptions;
QTest::newRow("usefulExpressionStatement") << u"x: y + 3;"_s << defaultOptions;
QTest::newRow("usefulExpressionStatement") << u"x: 3;"_s << defaultOptions;
QTest::newRow("void") << u"function f(): void {}"_s << defaultOptions;