diff --git a/src/plugins/qmldesigner/libs/designercore/designercoreutils/uniquename.cpp b/src/plugins/qmldesigner/libs/designercore/designercoreutils/uniquename.cpp index 1f45259b891..dbef5d45953 100644 --- a/src/plugins/qmldesigner/libs/designercore/designercoreutils/uniquename.cpp +++ b/src/plugins/qmldesigner/libs/designercore/designercoreutils/uniquename.cpp @@ -59,19 +59,27 @@ void capitalizeFirstLetter(QString &str) str.front() = str.front().toUpper(); } -void prependUnderscoreIfBanned(QString &id) +void prependUnderscoreIfDigit(QString &id) { - if (id.size() && (id.front().isDigit() || ModelUtils::isBannedQmlId(id))) + if (id.size() && id.front().isDigit()) id.prepend(u'_'); } +void appendDigitIfBannedQmlId(QString &id) +{ + if (ModelUtils::isBannedQmlId(id)) + id.append(u'1'); +} + QString toValidId(QStringView id) { QString validId = filterInvalidLettersAndCapitalizeAfterInvalidLetter(id); lowerFirstLetter(validId); - prependUnderscoreIfBanned(validId); + prependUnderscoreIfDigit(validId); + + appendDigitIfBannedQmlId(validId); return validId; } diff --git a/tests/unit/tests/unittests/designercoreutils/uniquename-test.cpp b/tests/unit/tests/unittests/designercoreutils/uniquename-test.cpp index 51c9969a894..69b14b3ea9f 100644 --- a/tests/unit/tests/unittests/designercoreutils/uniquename-test.cpp +++ b/tests/unit/tests/unittests/designercoreutils/uniquename-test.cpp @@ -61,14 +61,25 @@ TEST(UniqueName, generateId_properly_handles_dot_separated_words) ASSERT_THAT(uniqueId, "fooBarFoo"); } -TEST(UniqueName, generateId_prefixes_with_underscore_if_id_is_a_reserved_word) +TEST(UniqueName, generateId_appends_digit_if_id_is_a_reserved_word) { auto pred = [&](const QString &) -> bool { return false; }; QString id = "for"; QString uniqueId = UniqueName::generateId(id, pred); - ASSERT_THAT(uniqueId, "_for"); + ASSERT_THAT(uniqueId, "for1"); +} + +TEST(UniqueName, generateId_generates_unique_id_if_id_is_a_reserved_word) +{ + QStringList reservedIds{"for1", "for2"}; + auto pred = [&](const QString &newId) -> bool { return reservedIds.contains(newId); }; + QString id = "for"; + + QString uniqueId = UniqueName::generateId(id, pred); + + ASSERT_THAT(uniqueId, "for3"); } TEST(UniqueName, generateId_prefixes_with_underscore_if_id_is_a_number)