From 0ff75a721fa8514cf8898799da8647925fd89f22 Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 23 Feb 2021 08:38:51 +0100 Subject: [PATCH] qmljs: reformat inline components Fixes: QTCREATORBUG-25381 Change-Id: I472105cd6436d4d0ae7369880c332b8f4a2321ad Reviewed-by: Fabian Kosmale --- src/libs/qmljs/qmljscodeformatter.cpp | 8 ++++++++ src/libs/qmljs/qmljscodeformatter.h | 3 +++ src/libs/qmljs/qmljsreformatter.cpp | 9 +++++++++ tests/auto/qml/reformatter/inline.qml | 8 ++++++++ 4 files changed, 28 insertions(+) create mode 100644 tests/auto/qml/reformatter/inline.qml diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp index 23d1c65cf05..ac080305421 100644 --- a/src/libs/qmljs/qmljscodeformatter.cpp +++ b/src/libs/qmljs/qmljscodeformatter.cpp @@ -218,6 +218,12 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) default: leave(true); continue; } break; + case component_start: + switch (kind) { + case Identifier: turnInto(StateType::component_name); break; + default: leave(true); continue; + } break; + case property_name: turnInto(property_maybe_initializer); break; @@ -957,6 +963,8 @@ CodeFormatter::TokenKind CodeFormatter::extendedTokenKind(const QmlJS::Token &to return Property; if (text == QLatin1String("readonly")) return Readonly; + if (text == QLatin1String("component")) + return Component; if (text == QLatin1String("required")) return Required; if (text == QLatin1String("on")) diff --git a/src/libs/qmljs/qmljscodeformatter.h b/src/libs/qmljs/qmljscodeformatter.h index eab2cfc2405..947e7a0f4ee 100644 --- a/src/libs/qmljs/qmljscodeformatter.h +++ b/src/libs/qmljs/qmljscodeformatter.h @@ -109,6 +109,8 @@ public: // must be public to make Q_GADGET introspection work property_list_open, // after 'list' as a type property_name, // after the type property_maybe_initializer, // after the identifier + component_start, // after component + component_name, // after component Name enum_start, // after 'enum' @@ -239,6 +241,7 @@ protected: List, Property, Required, + Component, Readonly, Question, diff --git a/src/libs/qmljs/qmljsreformatter.cpp b/src/libs/qmljs/qmljsreformatter.cpp index 4d4aba71f96..bb2a0520721 100644 --- a/src/libs/qmljs/qmljsreformatter.cpp +++ b/src/libs/qmljs/qmljsreformatter.cpp @@ -598,6 +598,15 @@ protected: return false; } + bool visit(UiInlineComponent *ast) override + { + out(ast->componentToken); + out(" "); + out(ast->name.toString()); + out(": "); + return true; + } + bool visit(UiObjectDefinition *ast) override { accept(ast->qualifiedTypeNameId); diff --git a/tests/auto/qml/reformatter/inline.qml b/tests/auto/qml/reformatter/inline.qml new file mode 100644 index 00000000000..41eae25b1b0 --- /dev/null +++ b/tests/auto/qml/reformatter/inline.qml @@ -0,0 +1,8 @@ +import QtQuick 2.15 + +Item { + component CustomText: Text { + color: "red" + text: "Test Text" + } +}