diff options
author | Eike Ziller <eike.ziller@qt.io> | 2022-07-04 08:29:53 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2022-07-04 08:53:22 +0200 |
commit | 91fb0cf1232850f8cb41840d28689bf6bcfd633c (patch) | |
tree | 337a883dda347f3f0890989c0adefd062a43e851 /src/plugins/clangformat | |
parent | 1ce044ef7a0c69fbd7841dccd6f4bb7802d1dae4 (diff) | |
parent | 4180e1b84f43cc39119e003457f76be518588107 (diff) |
Merge remote-tracking branch 'origin/8.0'
Conflicts:
src/plugins/qmldesigner/qmldesignerprojectmanager.cpp
Change-Id: I5106bb632c2a3a144287097137be45b0894b9ee4
Diffstat (limited to 'src/plugins/clangformat')
-rw-r--r-- | src/plugins/clangformat/clangformatbaseindenter.cpp | 2 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatbaseindenter.h | 1 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatconfigwidget.cpp | 46 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatconfigwidget.h | 1 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatconfigwidget.ui | 18 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatconstants.h | 2 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatindenter.cpp | 8 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatindenter.h | 1 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatsettings.cpp | 34 | ||||
-rw-r--r-- | src/plugins/clangformat/clangformatsettings.h | 10 | ||||
-rw-r--r-- | src/plugins/clangformat/tests/clangformat-test.cpp | 1 |
11 files changed, 111 insertions, 13 deletions
diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index b9ee78b50e..22b55170a6 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -594,7 +594,7 @@ Utils::Text::Replacements ClangFormatBaseIndenter::indentsFor(QTextBlock startBl const QByteArray buffer = m_doc->toPlainText().toUtf8(); ReplacementsToKeep replacementsToKeep = ReplacementsToKeep::OnlyIndent; - if (formatCodeInsteadOfIndent() + if (formatWhileTyping() && (cursorPositionInEditor == -1 || cursorPositionInEditor >= startBlockPosition) && (typedChar == ';' || typedChar == '}')) { // Format before current position only in case the cursor is inside the indented block. diff --git a/src/plugins/clangformat/clangformatbaseindenter.h b/src/plugins/clangformat/clangformatbaseindenter.h index bcfd4ca4a4..0b96451aca 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.h +++ b/src/plugins/clangformat/clangformatbaseindenter.h @@ -72,6 +72,7 @@ public: protected: virtual bool formatCodeInsteadOfIndent() const { return false; } + virtual bool formatWhileTyping() const { return false; } virtual int lastSaveRevision() const { return 0; } private: diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index ddf0415ef4..e3e7629065 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -85,6 +85,7 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc initChecksAndPreview(!codeStyle->isReadOnly()); initOverrideCheckBox(); + initCheckBoxes(); initIndentationOrFormattingCombobox(); showOrHideWidgets(); @@ -128,6 +129,45 @@ void ClangFormatConfigWidget::initChecksAndPreview(bool enabled) m_preview->textDocument()->indenter()->setFileName(fileName); } +void ClangFormatConfigWidget::initCheckBoxes() +{ + if (m_project) { + m_ui->formatOnSave->hide(); + m_ui->formatWhileTyping->hide(); + return; + } + + m_ui->formatOnSave->show(); + m_ui->formatWhileTyping->show(); + + auto setEnableCheckBoxes = [this](int index) { + bool isFormatting = index == static_cast<int>(ClangFormatSettings::Mode::Formatting); + + m_ui->formatOnSave->setEnabled(isFormatting); + m_ui->formatWhileTyping->setEnabled(isFormatting); + }; + setEnableCheckBoxes(m_ui->indentingOrFormatting->currentIndex()); + connect(m_ui->indentingOrFormatting, QOverload<int>::of(&QComboBox::currentIndexChanged), + this, setEnableCheckBoxes); + + m_ui->formatOnSave->setChecked(ClangFormatSettings::instance().formatOnSave()); + m_ui->formatWhileTyping->setChecked(ClangFormatSettings::instance().formatWhileTyping()); + + connect(m_ui->formatOnSave, &QCheckBox::toggled, + this, [](bool checked) { + ClangFormatSettings &settings = ClangFormatSettings::instance(); + settings.setFormatOnSave(checked); + settings.write(); + }); + + connect(m_ui->formatWhileTyping, &QCheckBox::toggled, + this, [](bool checked) { + ClangFormatSettings &settings = ClangFormatSettings::instance(); + settings.setFormatWhileTyping(checked); + settings.write(); + }); +} + void ClangFormatConfigWidget::initOverrideCheckBox() { if (m_project) { @@ -190,7 +230,9 @@ void ClangFormatConfigWidget::initIndentationOrFormattingCombobox() m_ui->indentingOrFormatting->setCurrentIndex( static_cast<int>(ClangFormatSettings::instance().mode())); - m_ui->indentingOrFormatting->show(); + const bool isGlobal = !m_project; + m_ui->indentingOrFormatting->setVisible(isGlobal); + m_ui->formattingModeLabel->setVisible(isGlobal); connect(m_ui->indentingOrFormatting, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [](int index) { @@ -219,6 +261,7 @@ void ClangFormatConfigWidget::showOrHideWidgets() if (!m_ui->overrideDefault->isChecked() && m_project) { // Show the fallback configuration only globally. + m_ui->fallbackConfig->hide(); m_checksScrollArea->hide(); m_preview->hide(); m_ui->verticalLayout->addStretch(1); @@ -226,6 +269,7 @@ void ClangFormatConfigWidget::showOrHideWidgets() } createStyleFileIfNeeded(!m_project); + m_ui->fallbackConfig->show(); m_checksScrollArea->show(); m_preview->show(); diff --git a/src/plugins/clangformat/clangformatconfigwidget.h b/src/plugins/clangformat/clangformatconfigwidget.h index 52a5a94bc1..3b6f2aa163 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.h +++ b/src/plugins/clangformat/clangformatconfigwidget.h @@ -65,6 +65,7 @@ private: void showOrHideWidgets(); void initChecksAndPreview(bool enabled); void initOverrideCheckBox(); + void initCheckBoxes(); void connectChecks(); void fillTable(); diff --git a/src/plugins/clangformat/clangformatconfigwidget.ui b/src/plugins/clangformat/clangformatconfigwidget.ui index 814f558ca8..a0a042c273 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.ui +++ b/src/plugins/clangformat/clangformatconfigwidget.ui @@ -27,7 +27,7 @@ <number>8</number> </property> <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> + <layout class="QHBoxLayout" name="formattingModeLayout"> <item> <widget class="QLabel" name="formattingModeLabel"> <property name="text"> @@ -39,7 +39,7 @@ <widget class="QComboBox" name="indentingOrFormatting"/> </item> <item> - <spacer name="horizontalSpacer_2"> + <spacer name="formattingModeSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> @@ -54,6 +54,20 @@ </layout> </item> <item> + <widget class="QCheckBox" name="formatWhileTyping"> + <property name="text"> + <string>Format while typing</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="formatOnSave"> + <property name="text"> + <string>Format edited code on file save</string> + </property> + </widget> + </item> + <item> <widget class="QLabel" name="projectHasClangFormat"> <property name="text"> <string/> diff --git a/src/plugins/clangformat/clangformatconstants.h b/src/plugins/clangformat/clangformatconstants.h index 74e84efa17..cb201665da 100644 --- a/src/plugins/clangformat/clangformatconstants.h +++ b/src/plugins/clangformat/clangformatconstants.h @@ -32,6 +32,8 @@ static const char SETTINGS_FILE_ALT_NAME[] = "_clang-format"; static const char SAMPLE_FILE_NAME[] = "test.cpp"; static const char SETTINGS_ID[] = "ClangFormat"; static const char OVERRIDE_FILE_ID[] = "ClangFormat.OverrideFile"; +static const char FORMAT_CODE_ON_SAVE_ID[] = "ClangFormat.FormatCodeOnSave"; +static const char FORMAT_WHILE_TYPING_ID[] = "ClangFormat.FormatWhileTyping"; static const char MODE_ID[] = "ClangFormat.Mode"; static const char OPEN_CURRENT_CONFIG_ID[] = "ClangFormat.OpenCurrentConfig"; } // namespace Constants diff --git a/src/plugins/clangformat/clangformatindenter.cpp b/src/plugins/clangformat/clangformatindenter.cpp index 6f7bb32ca8..4d7273024e 100644 --- a/src/plugins/clangformat/clangformatindenter.cpp +++ b/src/plugins/clangformat/clangformatindenter.cpp @@ -114,7 +114,13 @@ int ClangFormatIndenter::lastSaveRevision() const bool ClangFormatIndenter::formatOnSave() const { - return !isBeautifierOnSaveActivated() && formatCodeInsteadOfIndent(); + return ClangFormatSettings::instance().formatOnSave() && !isBeautifierOnSaveActivated() + && formatCodeInsteadOfIndent(); +} + +bool ClangFormatIndenter::formatWhileTyping() const +{ + return ClangFormatSettings::instance().formatWhileTyping() && formatCodeInsteadOfIndent(); } } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatindenter.h b/src/plugins/clangformat/clangformatindenter.h index 83f0b912f6..9e1a65fb3d 100644 --- a/src/plugins/clangformat/clangformatindenter.h +++ b/src/plugins/clangformat/clangformatindenter.h @@ -40,6 +40,7 @@ public: private: bool formatCodeInsteadOfIndent() const override; + bool formatWhileTyping() const override; int lastSaveRevision() const override; }; diff --git a/src/plugins/clangformat/clangformatsettings.cpp b/src/plugins/clangformat/clangformatsettings.cpp index 2326f7b8ce..7ab17c0041 100644 --- a/src/plugins/clangformat/clangformatsettings.cpp +++ b/src/plugins/clangformat/clangformatsettings.cpp @@ -30,8 +30,6 @@ namespace ClangFormat { static const char FORMAT_CODE_INSTEAD_OF_INDENT_ID[] = "ClangFormat.FormatCodeInsteadOfIndent"; -static const char FORMAT_CODE_ON_SAVE_ID[] = "ClangFormat.FormatCodeOnSave"; -static const char FORMAT_WHILE_TYPING_ID[] = "ClangFormat.FormatWhileTyping"; ClangFormatSettings &ClangFormatSettings::instance() { @@ -45,15 +43,15 @@ ClangFormatSettings::ClangFormatSettings() settings->beginGroup(QLatin1String(Constants::SETTINGS_ID)); m_overrideDefaultFile = settings->value(QLatin1String(Constants::OVERRIDE_FILE_ID), false) .toBool(); + m_formatWhileTyping = settings->value(QLatin1String(Constants::FORMAT_WHILE_TYPING_ID), false) + .toBool(); + m_formatOnSave = settings->value(QLatin1String(Constants::FORMAT_CODE_ON_SAVE_ID), false) + .toBool(); // Convert old settings to new ones. New settings were added to QtC 8.0 bool isOldFormattingOn - = settings->value(QLatin1String(FORMAT_CODE_INSTEAD_OF_INDENT_ID), false).toBool() - || settings->value(QLatin1String(FORMAT_CODE_ON_SAVE_ID), false).toBool(); - + = settings->value(QLatin1String(FORMAT_CODE_INSTEAD_OF_INDENT_ID), false).toBool(); Core::ICore::settings()->remove(QLatin1String(FORMAT_CODE_INSTEAD_OF_INDENT_ID)); - Core::ICore::settings()->remove(QLatin1String(FORMAT_CODE_ON_SAVE_ID)); - Core::ICore::settings()->remove(QLatin1String(FORMAT_WHILE_TYPING_ID)); if (isOldFormattingOn) { settings->setValue(QLatin1String(Constants::MODE_ID), @@ -72,6 +70,8 @@ void ClangFormatSettings::write() const QSettings *settings = Core::ICore::settings(); settings->beginGroup(QLatin1String(Constants::SETTINGS_ID)); settings->setValue(QLatin1String(Constants::OVERRIDE_FILE_ID), m_overrideDefaultFile); + settings->setValue(QLatin1String(Constants::FORMAT_WHILE_TYPING_ID), m_formatWhileTyping); + settings->setValue(QLatin1String(Constants::FORMAT_CODE_ON_SAVE_ID), m_formatOnSave); settings->setValue(QLatin1String(Constants::MODE_ID), static_cast<int>(m_mode)); settings->endGroup(); } @@ -86,6 +86,26 @@ bool ClangFormatSettings::overrideDefaultFile() const return m_overrideDefaultFile; } +void ClangFormatSettings::setFormatWhileTyping(bool enable) +{ + m_formatWhileTyping = enable; +} + +bool ClangFormatSettings::formatWhileTyping() const +{ + return m_formatWhileTyping; +} + +void ClangFormatSettings::setFormatOnSave(bool enable) +{ + m_formatOnSave = enable; +} + +bool ClangFormatSettings::formatOnSave() const +{ + return m_formatOnSave; +} + void ClangFormatSettings::setMode(Mode mode) { m_mode = mode; diff --git a/src/plugins/clangformat/clangformatsettings.h b/src/plugins/clangformat/clangformatsettings.h index 88b37d393e..685dc042e8 100644 --- a/src/plugins/clangformat/clangformatsettings.h +++ b/src/plugins/clangformat/clangformatsettings.h @@ -49,9 +49,17 @@ public: void setMode(Mode mode); Mode mode() const; + void setFormatWhileTyping(bool enable); + bool formatWhileTyping() const; + + void setFormatOnSave(bool enable); + bool formatOnSave() const; + private: - bool m_overrideDefaultFile = false; Mode m_mode; + bool m_overrideDefaultFile = false; + bool m_formatWhileTyping = false; + bool m_formatOnSave = false; }; } // namespace ClangFormat diff --git a/src/plugins/clangformat/tests/clangformat-test.cpp b/src/plugins/clangformat/tests/clangformat-test.cpp index 174a3d1170..0493eeca97 100644 --- a/src/plugins/clangformat/tests/clangformat-test.cpp +++ b/src/plugins/clangformat/tests/clangformat-test.cpp @@ -53,6 +53,7 @@ public: private: bool formatCodeInsteadOfIndent() const override { return true; } + bool formatWhileTyping() const override { return true; } }; ClangFormatTest::ClangFormatTest() |