aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmlformat/qmlformat.cpp
diff options
context:
space:
mode:
authorSami Shalayel <sami.shalayel@qt.io>2024-09-13 19:18:28 +0200
committerSami Shalayel <sami.shalayel@qt.io>2024-09-20 18:55:30 +0200
commit09236b1101574c1a009d3cee0c979286f497e466 (patch)
tree899f01e3445a700a70adfce623c0de7024851079 /tools/qmlformat/qmlformat.cpp
parent511f1f0fe508d28cebf8ec4fe8e026dac752f602 (diff)
qmlformat: extract settings logic into library
Move the code from tools/qmlformat.cpp that parses .qmlformat.ini files into a newly created qmlformat library under src/qmlformat. This would allow qmlls to reuse the same code. Task-number: QTBUG-128866 Change-Id: Ibf7e52be744ea11c235d0b853ffa80f778c14a2b Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'tools/qmlformat/qmlformat.cpp')
-rw-r--r--tools/qmlformat/qmlformat.cpp192
1 files changed, 2 insertions, 190 deletions
diff --git a/tools/qmlformat/qmlformat.cpp b/tools/qmlformat/qmlformat.cpp
index 1bb52f6cae..8767941ccd 100644
--- a/tools/qmlformat/qmlformat.cpp
+++ b/tools/qmlformat/qmlformat.cpp
@@ -20,199 +20,11 @@
#endif
#include <QtQmlToolingSettings/private/qqmltoolingsettings_p.h>
+#include <QtQmlFormat/private/qqmlformatsettings_p.h>
+#include <QtQmlFormat/private/qqmlformatoptions_p.h>
using namespace QQmlJS::Dom;
-enum QQmlFormatOptionLineEndings {
- Native,
- Windows,
- Unix,
- OldMacOs,
-};
-
-class QQmlFormatSettings : public QQmlToolingSettings
-{
-public:
- QQmlFormatSettings(const QString &toolName = u"qmlformat"_s);
- static const inline QLatin1StringView s_useTabsSetting = QLatin1String("UseTabs");
- static const inline QLatin1StringView s_indentWidthSetting = QLatin1String("IndentWidth");
- static const inline QLatin1StringView s_normalizeSetting = QLatin1String("NormalizeOrder");
- static const inline QLatin1StringView s_newlineSetting = QLatin1String("NewlineType");
- static const inline QLatin1StringView s_objectsSpacingSetting = QLatin1String("ObjectsSpacing");
- static const inline QLatin1StringView s_functionsSpacingSetting = QLatin1String("FunctionsSpacing");
-};
-
-QQmlFormatSettings::QQmlFormatSettings(const QString &toolName) : QQmlToolingSettings(toolName)
-{
- addOption(s_useTabsSetting);
- addOption(s_indentWidthSetting, 4);
- addOption(s_normalizeSetting);
- addOption(s_newlineSetting, QStringLiteral("native"));
- addOption(s_objectsSpacingSetting);
- addOption(s_functionsSpacingSetting);
-}
-
-class QQmlFormatOptions
-{
-public:
- QQmlFormatOptions();
- using LineEndings = QQmlJS::Dom::LineWriterOptions::LineEndings;
- using AttributesSequence = QQmlJS::Dom::LineWriterOptions::AttributesSequence;
- static LineEndings detectLineEndings(const QString &code);
- static LineEndings lineEndings(QQmlFormatOptionLineEndings endings, const QString &code)
- {
- switch (endings) {
- case Native:
- return detectLineEndings(code);
- case OldMacOs:
- return LineEndings::OldMacOs;
- case Windows:
- return LineEndings::Windows;
- case Unix:
- return LineEndings::Unix;
- }
- Q_UNREACHABLE_RETURN(LineEndings::Unix);
- }
- bool tabsEnabled() const { return m_options.formatOptions.useTabs; }
- void setTabsEnabled(bool tabs) { m_options.formatOptions.useTabs = tabs; }
- bool normalizeEnabled() const
- {
- return m_options.attributesSequence == AttributesSequence::Normalize;
- }
- void setNormalizeEnabled(bool normalize)
- {
- m_options.attributesSequence =
- (normalize ? AttributesSequence::Normalize : AttributesSequence::Preserve);
- }
- bool objectsSpacing() const { return m_options.objectsSpacing; }
- void setObjectsSpacing(bool spacing) { m_options.objectsSpacing = spacing; }
- bool functionsSpacing() const { return m_options.functionsSpacing; }
- void setFunctionsSpacing(bool spacing) { m_options.functionsSpacing = spacing; }
- int indentWidth() const { return m_options.formatOptions.indentSize; }
- void setIndentWidth(int width) { m_options.formatOptions.indentSize = width; }
- QQmlJS::Dom::LineWriterOptions optionsForCode(const QString &code) const
- {
- QQmlJS::Dom::LineWriterOptions result = m_options;
- result.lineEndings = lineEndings(m_newline, code);
- return result;
- }
- static QQmlFormatOptionLineEndings parseEndings(const QString &endings);
- QQmlFormatOptionLineEndings newline() const { return m_newline; }
- void setNewline(const QQmlFormatOptionLineEndings &endings) { m_newline = endings; }
- QStringList files() const { return m_files; }
- void setFiles(const QStringList &newFiles) { m_files = newFiles; }
- QStringList arguments() const { return m_arguments; }
- void setArguments(const QStringList &newArguments) { m_arguments = newArguments; }
- bool isVerbose() const { return m_verbose; }
- void setIsVerbose(bool newVerbose) { m_verbose = newVerbose; }
- bool isValid() const { return m_valid; }
- void setIsValid(bool newValid) { m_valid = newValid; }
- bool isInplace() const { return m_inplace; }
- void setIsInplace(bool newInplace) { m_inplace = newInplace; }
- bool forceEnabled() const { return m_force; }
- void setForceEnabled(bool newForce) { m_force = newForce; }
- bool ignoreSettingsEnabled() const { return m_ignoreSettings; }
- void setIgnoreSettingsEnabled(bool newIgnoreSettings) { m_ignoreSettings = newIgnoreSettings; }
- bool writeDefaultSettingsEnabled() const { return m_writeDefaultSettings; }
- void setWriteDefaultSettingsEnabled(bool newWriteDefaultSettings)
- {
- m_writeDefaultSettings = newWriteDefaultSettings;
- }
- bool indentWidthSet() const { return m_indentWidthSet; }
- void setIndentWidthSet(bool newIndentWidthSet) { m_indentWidthSet = newIndentWidthSet; }
- QStringList errors() const { return m_errors; }
- void addError(const QString &newError) { m_errors.append(newError); };
- void applySettings(const QQmlFormatSettings &settings);
-
-private:
- QQmlJS::Dom::LineWriterOptions m_options;
- QQmlFormatOptionLineEndings m_newline = Native;
- QStringList m_files;
- QStringList m_arguments;
- QStringList m_errors;
- bool m_verbose = false;
- bool m_valid = false;
- bool m_inplace = false;
- bool m_force = false;
- bool m_ignoreSettings = false;
- bool m_writeDefaultSettings = false;
- bool m_indentWidthSet = false;
-};
-
-QQmlFormatOptions::QQmlFormatOptions()
-{
- m_options.updateOptions = QQmlJS::Dom::LineWriterOptions::Update::None;
- setTabsEnabled(false);
- setNormalizeEnabled(false);
- setObjectsSpacing(false);
- setFunctionsSpacing(false);
- setIndentWidth(4);
-}
-
-QQmlFormatOptions::LineEndings QQmlFormatOptions::detectLineEndings(const QString &code)
-{
- const QQmlJS::Dom::LineWriterOptions::LineEndings defaultEndings =
-#if defined(Q_OS_WIN)
- LineEndings::Windows;
-#else
- LineEndings::Unix;
-#endif
- // find out current line endings...
- int newlineIndex = code.indexOf(QChar(u'\n'));
- int crIndex = code.indexOf(QChar(u'\r'));
- if (newlineIndex >= 0) {
- if (crIndex >= 0) {
- if (crIndex + 1 == newlineIndex)
- return LineEndings::Windows;
- qWarning().noquote() << "Invalid line ending in file, using default";
- return defaultEndings;
- }
- return LineEndings::Unix;
- }
- if (crIndex >= 0) {
- return LineEndings::OldMacOs;
- }
- qWarning().noquote() << "Unknown line ending in file, using default";
- return defaultEndings;
-}
-
-QQmlFormatOptionLineEndings QQmlFormatOptions::parseEndings(const QString &endings)
-{
- if (endings == u"unix")
- return Unix;
- if (endings == u"windows")
- return Windows;
- if (endings == u"macos")
- return OldMacOs;
- if (endings == u"native")
- return Native;
- qWarning().noquote() << "Unknown line ending type" << endings << ", using default";
-#if defined (Q_OS_WIN)
- return Windows;
-#else
- return Unix;
-#endif
-}
-
-void QQmlFormatOptions::applySettings(const QQmlFormatSettings &settings)
-{
- // Don't overwrite tab settings that were already set.
- if (!indentWidthSet()) {
- if (settings.isSet(QQmlFormatSettings::s_indentWidthSetting))
- setIndentWidth(settings.value(QQmlFormatSettings::s_indentWidthSetting).toInt());
- if (settings.isSet(QQmlFormatSettings::s_useTabsSetting))
- setTabsEnabled(settings.value(QQmlFormatSettings::s_useTabsSetting).toBool());
- }
- if (settings.isSet(QQmlFormatSettings::s_normalizeSetting))
- setNormalizeEnabled(settings.value(QQmlFormatSettings::s_normalizeSetting).toBool());
- if (settings.isSet(QQmlFormatSettings::s_newlineSetting))
- setNewline(QQmlFormatOptions::parseEndings(settings.value(QQmlFormatSettings::s_newlineSetting).toString()));
- if (settings.isSet(QQmlFormatSettings::s_objectsSpacingSetting))
- setObjectsSpacing(settings.value(QQmlFormatSettings::s_objectsSpacingSetting).toBool());
- if (settings.isSet(QQmlFormatSettings::s_functionsSpacingSetting))
- setFunctionsSpacing(settings.value(QQmlFormatSettings::s_functionsSpacingSetting).toBool());
-}
-
static void logParsingErrors(const DomItem &fileItem, const QString &filename)
{
fileItem.iterateErrors(