aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangformat
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-07-04 08:29:53 +0200
committerEike Ziller <eike.ziller@qt.io>2022-07-04 08:53:22 +0200
commit91fb0cf1232850f8cb41840d28689bf6bcfd633c (patch)
tree337a883dda347f3f0890989c0adefd062a43e851 /src/plugins/clangformat
parent1ce044ef7a0c69fbd7841dccd6f4bb7802d1dae4 (diff)
parent4180e1b84f43cc39119e003457f76be518588107 (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.cpp2
-rw-r--r--src/plugins/clangformat/clangformatbaseindenter.h1
-rw-r--r--src/plugins/clangformat/clangformatconfigwidget.cpp46
-rw-r--r--src/plugins/clangformat/clangformatconfigwidget.h1
-rw-r--r--src/plugins/clangformat/clangformatconfigwidget.ui18
-rw-r--r--src/plugins/clangformat/clangformatconstants.h2
-rw-r--r--src/plugins/clangformat/clangformatindenter.cpp8
-rw-r--r--src/plugins/clangformat/clangformatindenter.h1
-rw-r--r--src/plugins/clangformat/clangformatsettings.cpp34
-rw-r--r--src/plugins/clangformat/clangformatsettings.h10
-rw-r--r--src/plugins/clangformat/tests/clangformat-test.cpp1
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()