diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-23 14:31:30 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-03-07 13:45:31 +0000 |
commit | 2524e2adb3fb9a3a840a20422798aec0e20fc614 (patch) | |
tree | 2c154840c348e335aec1769269fc4308140a85c3 /src/plugins/cppeditor | |
parent | cdd85477fb890c16f106a34daabd63088fbd654a (diff) |
CppEditor: Let users provide statement macros
Like ClangFormat has.
Fixes: QTCREATORBUG-15069
Fixes: QTCREATORBUG-18789
Change-Id: I0ffb70be502d1c73aaaf436484ddc6704f152621
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cppeditor')
-rw-r--r-- | src/plugins/cppeditor/cppcodeformatter.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodeformatter.h | 2 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodestylesettings.cpp | 4 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodestylesettings.h | 1 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodestylesettingspage.cpp | 27 |
5 files changed, 36 insertions, 3 deletions
diff --git a/src/plugins/cppeditor/cppcodeformatter.cpp b/src/plugins/cppeditor/cppcodeformatter.cpp index ca14d22a7c..3d01539440 100644 --- a/src/plugins/cppeditor/cppcodeformatter.cpp +++ b/src/plugins/cppeditor/cppcodeformatter.cpp @@ -842,7 +842,8 @@ bool CodeFormatter::tryDeclaration() if (tokenText.startsWith(QLatin1String("Q_")) || tokenText.startsWith(QLatin1String("QT_")) || tokenText.startsWith(QLatin1String("QML_")) - || tokenText.startsWith(QLatin1String("QDOC_"))) { + || tokenText.startsWith(QLatin1String("QDOC_")) + || m_statementMacros.contains(tokenText)) { enter(qt_like_macro); return true; } @@ -1118,6 +1119,7 @@ QtStyleCodeFormatter::QtStyleCodeFormatter(const TabSettings &tabSettings, , m_styleSettings(settings) { setTabSize(tabSettings.m_tabSize); + setStatementMacros(m_styleSettings.statementMacros); } void QtStyleCodeFormatter::setTabSettings(const TabSettings &tabSettings) @@ -1129,6 +1131,7 @@ void QtStyleCodeFormatter::setTabSettings(const TabSettings &tabSettings) void QtStyleCodeFormatter::setCodeStyleSettings(const CppCodeStyleSettings &settings) { m_styleSettings = settings; + setStatementMacros(m_styleSettings.statementMacros); } void QtStyleCodeFormatter::saveBlockData(QTextBlock *block, const BlockData &data) const diff --git a/src/plugins/cppeditor/cppcodeformatter.h b/src/plugins/cppeditor/cppcodeformatter.h index 828fec763b..98aacbc55e 100644 --- a/src/plugins/cppeditor/cppcodeformatter.h +++ b/src/plugins/cppeditor/cppcodeformatter.h @@ -40,6 +40,7 @@ public: void indentForNewLineAfter(const QTextBlock &block, int *indent, int *padding); void setTabSize(int tabSize); + void setStatementMacros(const QStringList ¯os) { m_statementMacros = macros; } void invalidateCache(QTextDocument *document); @@ -224,6 +225,7 @@ private: int m_paddingDepth = 0; int m_tabSize = 4; + QStringList m_statementMacros; friend class Internal::CppCodeFormatterData; }; diff --git a/src/plugins/cppeditor/cppcodestylesettings.cpp b/src/plugins/cppeditor/cppcodestylesettings.cpp index 733f066eac..5499005c62 100644 --- a/src/plugins/cppeditor/cppcodestylesettings.cpp +++ b/src/plugins/cppeditor/cppcodestylesettings.cpp @@ -17,6 +17,7 @@ #include <utils/qtcassert.h> +static const char statementMacrosKey[] = "StatementMacros"; static const char indentBlockBracesKey[] = "IndentBlockBraces"; static const char indentBlockBodyKey[] = "IndentBlockBody"; static const char indentClassBracesKey[] = "IndentClassBraces"; @@ -50,6 +51,7 @@ CppCodeStyleSettings::CppCodeStyleSettings() = default; Store CppCodeStyleSettings::toMap() const { return { + {statementMacrosKey, statementMacros}, {indentBlockBracesKey, indentBlockBraces}, {indentBlockBodyKey, indentBlockBody}, {indentClassBracesKey, indentClassBraces}, @@ -76,6 +78,7 @@ Store CppCodeStyleSettings::toMap() const void CppCodeStyleSettings::fromMap(const Store &map) { + statementMacros = map.value(statementMacrosKey, statementMacros).toStringList(); indentBlockBraces = map.value(indentBlockBracesKey, indentBlockBraces).toBool(); indentBlockBody = map.value(indentBlockBodyKey, indentBlockBody).toBool(); indentClassBraces = map.value(indentClassBracesKey, indentClassBraces).toBool(); @@ -128,6 +131,7 @@ bool CppCodeStyleSettings::equals(const CppCodeStyleSettings &rhs) const && bindStarToRightSpecifier == rhs.bindStarToRightSpecifier && extraPaddingForConditionsIfConfusingAlign == rhs.extraPaddingForConditionsIfConfusingAlign && alignAssignments == rhs.alignAssignments + && statementMacros == rhs.statementMacros && preferGetterNameWithoutGetPrefix == rhs.preferGetterNameWithoutGetPrefix #ifdef WITH_TESTS && forceFormatting == rhs.forceFormatting diff --git a/src/plugins/cppeditor/cppcodestylesettings.h b/src/plugins/cppeditor/cppcodestylesettings.h index 8369df099e..a798ca7434 100644 --- a/src/plugins/cppeditor/cppcodestylesettings.h +++ b/src/plugins/cppeditor/cppcodestylesettings.h @@ -18,6 +18,7 @@ class CPPEDITOR_EXPORT CppCodeStyleSettings public: CppCodeStyleSettings(); + QStringList statementMacros; bool indentBlockBraces = false; bool indentBlockBody = true; bool indentClassBraces = false; diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index 74f505d663..c1dfcebb3b 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -163,8 +163,9 @@ public: , m_bindStarToRightSpecifier(createCheckBox(Tr::tr("Right const/volatile"), Tr::tr("This does not apply to references."))) , m_tabSettingsWidget(new TabSettingsWidget) + , m_statementMacros(new QPlainTextEdit) { - QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(m_tabSettingsWidget->sizePolicy().hasHeightForWidth()); @@ -241,11 +242,25 @@ public: } }; + sizePolicy.setVerticalPolicy(QSizePolicy::Preferred); + m_statementMacros->setToolTip( + Tr::tr("Macros that can be used as statements without a trailing semicolon")); + m_statementMacros->setSizePolicy(sizePolicy); + const Group statementMacrosGroup { + title(Tr::tr("Statement macros")), + Column { m_statementMacros} + }; + QObject::connect(m_statementMacros, &QPlainTextEdit::textChanged, q, [this] { + m_handlingStatementMacroChange = true; + q->slotCodeStyleSettingsChanged(); + m_handlingStatementMacroChange = false; + }); + Row { TabWidget { bindTo(&m_categoryTab), Tab { Tr::tr("General"), - Row { Column { m_tabSettingsWidget, st }, createPreview(0) } + Row { Column { m_tabSettingsWidget, statementMacrosGroup }, createPreview(0) } }, Tab { Tr::tr("Content"), Row { contentGroup, createPreview(1) } }, Tab { Tr::tr("Braces"), Row { bracesGroup, createPreview(2) } }, @@ -310,6 +325,8 @@ public: QTabWidget *m_categoryTab = nullptr; TabSettingsWidget *m_tabSettingsWidget = nullptr; + QPlainTextEdit * const m_statementMacros; + bool m_handlingStatementMacroChange = false; }; CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent) @@ -361,6 +378,10 @@ CppCodeStyleSettings CppCodeStylePreferencesWidget::cppCodeStyleSettings() const { CppCodeStyleSettings set; + set.statementMacros + = Utils::transform(d->m_statementMacros->toPlainText().trimmed().split('\n', + Qt::SkipEmptyParts), + [](const QString &line) { return line.trimmed(); }); set.indentBlockBraces = d->m_indentBlockBraces->isChecked(); set.indentBlockBody = d->m_indentBlockBody->isChecked(); set.indentClassBraces = d->m_indentClassBraces->isChecked(); @@ -399,6 +420,8 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti { const bool wasBlocked = m_blockUpdates; m_blockUpdates = true; + if (!d->m_handlingStatementMacroChange) + d->m_statementMacros->setPlainText(s.statementMacros.join('\n')); d->m_indentBlockBraces->setChecked(s.indentBlockBraces); d->m_indentBlockBody->setChecked(s.indentBlockBody); d->m_indentClassBraces->setChecked(s.indentClassBraces); |