Clang: Allow to forward warnings flags from build system

Change-Id: I47ebb1ce4f3b5544408eb1d0f891ed5090394282
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-01-31 10:16:28 +01:00
parent 69565d6c88
commit b9d3055e72
13 changed files with 132 additions and 32 deletions

View File

@@ -38,6 +38,7 @@
#include <projectexplorer/selectablefilesmodel.h>
#include <utils/algorithm.h>
#include <utils/executeondestruction.h>
#include <utils/qtcassert.h>
#include <utils/utilsicons.h>
@@ -611,7 +612,7 @@ ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget(const Core::Id &confi
this, &ClangDiagnosticConfigsWidget::onCopyButtonClicked);
connect(m_ui->removeButton, &QPushButton::clicked,
this, &ClangDiagnosticConfigsWidget::onRemoveButtonClicked);
connectDiagnosticOptionsChanged();
connectClangOnlyOptionsChanged();
connect(m_tidyChecks->checksPrefixesTree,
&QTreeView::clicked,
@@ -734,14 +735,17 @@ static QStringList normalizeDiagnosticInputOptions(const QString &options)
return options.simplified().split(QLatin1Char(' '), QString::SkipEmptyParts);
}
void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited()
void ClangDiagnosticConfigsWidget::onClangOnlyOptionsChanged()
{
// Clean up input
const bool useBuildSystemWarnings = m_clangBaseChecks->useFlagsFromBuildSystemCheckBox
->isChecked();
// Clean up options input
const QString diagnosticOptions = m_clangBaseChecks->diagnosticOptionsTextEdit->document()
->toPlainText();
const QStringList normalizedOptions = normalizeDiagnosticInputOptions(diagnosticOptions);
// Validate
// Validate options input
const QString errorMessage = validateDiagnosticOptions(normalizedOptions);
updateValidityWidgets(errorMessage);
if (!errorMessage.isEmpty()) {
@@ -754,6 +758,7 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited()
// Commit valid changes
ClangDiagnosticConfig updatedConfig = selectedConfig();
updatedConfig.setClangOptions(normalizedOptions);
updatedConfig.setUseBuildSystemWarnings(useBuildSystemWarnings);
updateConfig(updatedConfig);
}
@@ -793,11 +798,17 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox()
if (isConfigChooserEmpty())
return;
disconnectClangOnlyOptionsChanged();
Utils::ExecuteOnDestruction e([this]() { connectClangOnlyOptionsChanged(); });
const ClangDiagnosticConfig &config = selectedConfig();
// Update main button row
m_ui->removeButton->setEnabled(!config.isReadOnly());
// Update check box
m_clangBaseChecks->useFlagsFromBuildSystemCheckBox->setChecked(config.useBuildSystemWarnings());
// Update Text Edit
const QString options = m_notAcceptedOptions.contains(config.id())
? m_notAcceptedOptions.value(config.id())
@@ -894,11 +905,8 @@ bool ClangDiagnosticConfigsWidget::isConfigChooserEmpty() const
void ClangDiagnosticConfigsWidget::setDiagnosticOptions(const QString &options)
{
if (options != m_clangBaseChecks->diagnosticOptionsTextEdit->document()->toPlainText()) {
disconnectDiagnosticOptionsChanged();
if (options != m_clangBaseChecks->diagnosticOptionsTextEdit->document()->toPlainText())
m_clangBaseChecks->diagnosticOptionsTextEdit->document()->setPlainText(options);
connectDiagnosticOptionsChanged();
}
const QString errorMessage
= validateDiagnosticOptions(normalizeDiagnosticInputOptions(options));
@@ -968,20 +976,28 @@ void ClangDiagnosticConfigsWidget::disconnectConfigChooserCurrentIndex()
this, &ClangDiagnosticConfigsWidget::onCurrentConfigChanged);
}
void ClangDiagnosticConfigsWidget::connectDiagnosticOptionsChanged()
void ClangDiagnosticConfigsWidget::connectClangOnlyOptionsChanged()
{
connect(m_clangBaseChecks->useFlagsFromBuildSystemCheckBox,
&QCheckBox::stateChanged,
this,
&ClangDiagnosticConfigsWidget::onClangOnlyOptionsChanged);
connect(m_clangBaseChecks->diagnosticOptionsTextEdit->document(),
&QTextDocument::contentsChanged,
this,
&ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited);
&ClangDiagnosticConfigsWidget::onClangOnlyOptionsChanged);
}
void ClangDiagnosticConfigsWidget::disconnectDiagnosticOptionsChanged()
void ClangDiagnosticConfigsWidget::disconnectClangOnlyOptionsChanged()
{
disconnect(m_clangBaseChecks->useFlagsFromBuildSystemCheckBox,
&QCheckBox::stateChanged,
this,
&ClangDiagnosticConfigsWidget::onClangOnlyOptionsChanged);
disconnect(m_clangBaseChecks->diagnosticOptionsTextEdit->document(),
&QTextDocument::contentsChanged,
this,
&ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited);
&ClangDiagnosticConfigsWidget::onClangOnlyOptionsChanged);
}
ClangDiagnosticConfigs ClangDiagnosticConfigsWidget::customConfigs() const