aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlivier De Cannière <[email protected]>2025-06-20 12:34:53 +0200
committerOlivier De Cannière <[email protected]>2025-06-30 19:40:44 +0200
commita3863b2d8bfdd2a0c138e857d3f119a5f6dfc11e (patch)
treeff1b33d02f867160a5ab21b61f0fba6332783da6 /src
parentbc6b4940a1da48ca1f82f9ccc9b9901a6c52bf56 (diff)
qmlformat: Fix comment handling around enumsHEADdev
Add more regions for comments to attach to. Remove special casing preventing comments to attach to the braces of an enum. It is no longer needed. The comma token belong to the enum entry after it. The opposite was assumpted to be true before which led to comments being attached to the wrong item and moving around. Task-number: QTBUG-133315 Task-number: QTBUG-123386 Pick-to: 6.10 6.9 6.8 Change-Id: I32f8c49aff6a4c88c323450beec9aa0f5bc5bbe5 Reviewed-by: Semih Yavuz <[email protected]> Reviewed-by: Fabian Kosmale <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/qml/parser/qqmljs.g5
-rw-r--r--src/qml/parser/qqmljsast_p.h2
-rw-r--r--src/qmldom/qqmldomastcreator.cpp9
-rw-r--r--src/qmldom/qqmldomcomments.cpp8
-rw-r--r--src/qmldom/qqmldomelements.cpp10
5 files changed, 19 insertions, 15 deletions
diff --git a/src/qml/parser/qqmljs.g b/src/qml/parser/qqmljs.g
index 0bd9ce0f2e..03f7777dc4 100644
--- a/src/qml/parser/qqmljs.g
+++ b/src/qml/parser/qqmljs.g
@@ -1630,6 +1630,7 @@ EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER;
/.
case $rule_number: {
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3));
+ node->commaToken = loc(2);
node->memberToken = loc(3);
sym(1).Node = node;
break;
@@ -1640,7 +1641,9 @@ EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER T_EQ T_NUMERIC_LITERAL;
/.
case $rule_number: {
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), sym(5).dval);
+ node->commaToken = loc(2);
node->memberToken = loc(3);
+ node->equalToken = loc(4);
node->valueToken = loc(5);
sym(1).Node = node;
break;
@@ -1652,7 +1655,9 @@ EnumMemberList: EnumMemberList T_COMMA T_IDENTIFIER T_EQ T_MINUS T_NUMERIC_LITER
/.
case $rule_number: {
AST::UiEnumMemberList *node = new (pool) AST::UiEnumMemberList(sym(1).UiEnumMemberList, stringRef(3), -sym(6).dval);
+ node->commaToken = loc(2);
node->memberToken = loc(3);
+ node->equalToken = loc(4);
node->valueToken = combine(loc(5), loc(6));
sym(1).Node = node;
break;
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h
index 50186fe27b..91e49f6be8 100644
--- a/src/qml/parser/qqmljsast_p.h
+++ b/src/qml/parser/qqmljsast_p.h
@@ -3789,7 +3789,9 @@ public:
UiEnumMemberList *next;
QStringView member;
double value;
+ SourceLocation commaToken;
SourceLocation memberToken;
+ SourceLocation equalToken;
SourceLocation valueToken;
};
diff --git a/src/qmldom/qqmldomastcreator.cpp b/src/qmldom/qqmldomastcreator.cpp
index 9b9ad035b1..c36acd1a8f 100644
--- a/src/qmldom/qqmldomastcreator.cpp
+++ b/src/qmldom/qqmldomastcreator.cpp
@@ -1342,6 +1342,8 @@ bool QQmlDomAstCreator::visit(AST::UiEnumDeclaration *el)
pushEl(enumPathFromOwner, *ePtr, el);
FileLocations::addRegion(nodeStack.last().fileLocations, EnumKeywordRegion, el->enumToken);
FileLocations::addRegion(nodeStack.last().fileLocations, IdentifierRegion, el->identifierToken);
+ FileLocations::addRegion(nodeStack.last().fileLocations, LeftBraceRegion, el->lbraceToken);
+ FileLocations::addRegion(nodeStack.last().fileLocations, RightBraceRegion, el->rbraceToken);
loadAnnotations(el);
return true;
}
@@ -1364,11 +1366,16 @@ bool QQmlDomAstCreator::visit(AST::UiEnumMemberList *el)
EnumDecl &eDecl = std::get<EnumDecl>(currentNode().value);
Path itPathFromDecl = eDecl.addValue(it);
const auto map = createMap(DomType::EnumItem, itPathFromDecl, nullptr);
- FileLocations::addRegion(map, MainRegion, combine(el->memberToken, el->valueToken));
+ if (el->commaToken.isValid())
+ FileLocations::addRegion(map, CommaTokenRegion, el->commaToken);
if (el->memberToken.isValid())
FileLocations::addRegion(map, IdentifierRegion, el->memberToken);
+ if (el->equalToken.isValid())
+ FileLocations::addRegion(map, EqualTokenRegion, el->equalToken);
if (el->valueToken.isValid())
FileLocations::addRegion(map, EnumValueRegion, el->valueToken);
+ FileLocations::addRegion(
+ map, MainRegion, combine(combine(el->memberToken, el->commaToken), el->valueToken));
return true;
}
diff --git a/src/qmldom/qqmldomcomments.cpp b/src/qmldom/qqmldomcomments.cpp
index 9b7fd5b7a4..5f18f65824 100644
--- a/src/qmldom/qqmldomcomments.cpp
+++ b/src/qmldom/qqmldomcomments.cpp
@@ -492,14 +492,6 @@ const QSet<int> AstRangesVisitor::kindsToSkip()
bool AstRangesVisitor::shouldSkipRegion(const DomItem &item, FileLocationRegion region)
{
switch (item.internalKind()) {
- case DomType::EnumDecl: {
- return (region == FileLocationRegion::IdentifierRegion)
- || (region == FileLocationRegion::EnumKeywordRegion);
- }
- case DomType::EnumItem: {
- return (region == FileLocationRegion::IdentifierRegion)
- || (region == FileLocationRegion::EnumValueRegion);
- }
case DomType::QmlObject: {
return (region == FileLocationRegion::RightBraceRegion
|| region == FileLocationRegion::LeftBraceRegion);
diff --git a/src/qmldom/qqmldomelements.cpp b/src/qmldom/qqmldomelements.cpp
index 57e9024869..35defa7036 100644
--- a/src/qmldom/qqmldomelements.cpp
+++ b/src/qmldom/qqmldomelements.cpp
@@ -1412,10 +1412,8 @@ void EnumDecl::writeOut(const DomItem &self, OutWriter &ow) const
.writeRegion(LeftBraceRegion);
int iLevel = ow.increaseIndent(1);
const auto values = self.field(Fields::values).values();
- for (const auto &value : values) {
- ow.ensureNewline();
+ for (const auto &value : values)
value.writeOut(ow);
- }
ow.decreaseIndent(1, iLevel);
ow.ensureNewline().writeRegion(RightBraceRegion);
}
@@ -2088,17 +2086,17 @@ bool EnumItem::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor)
void EnumItem::writeOut(const DomItem &self, OutWriter &ow) const
{
+ index_type myIndex = self.pathFromOwner().last().headIndex();
+ if (myIndex != 0)
+ ow.writeRegion(CommaTokenRegion);
ow.ensureNewline();
ow.writeRegion(IdentifierRegion, name());
- index_type myIndex = self.pathFromOwner().last().headIndex();
if (m_valueKind == ValueKind::ExplicitValue) {
QString v = QString::number(value(), 'f', 0);
if (abs(value() - v.toDouble()) > 1.e-10)
v = QString::number(value());
ow.ensureSpace().writeRegion(EqualTokenRegion).ensureSpace().writeRegion(EnumValueRegion, v);
}
- if (myIndex >= 0 && self.container().indexes() != myIndex + 1)
- ow.writeRegion(CommaTokenRegion);
}
QmlUri QmlUri::fromString(const QString &str)