forked from qt-creator/qt-creator
QmlDesigner::Model - changes in id generator
Add undescore if given string starts with a digit, e.g. (_123). Generate consecutive id if string belongs to reserved QML keywords, e.g. (text1). Task-number: QDS-13039 Change-Id: I0d5782ae666ea6060a4f765ded58624a08b3255f Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user