forked from qt-creator/qt-creator
Clang: Introduce switching/adding of warning configurations
A warning configuration is a list of command line (warning) options for libclang. Three non-editable built-in configurations are provided by default. The user can copy a configuration to customize it. This is still a global setting and it changes take effect after re-opening a document. Both issues will be addressed in follow-up changes. Change-Id: I86667d7dc39ad31b88666454220e6da563797740 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
146
src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
Normal file
146
src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "clangdiagnosticconfigsmodel.h"
|
||||
|
||||
#include "cpptoolsconstants.h"
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
|
||||
namespace CppTools {
|
||||
namespace Internal {
|
||||
|
||||
static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &model)
|
||||
{
|
||||
ClangDiagnosticConfig config;
|
||||
config.setId("Builtin.Questionable");
|
||||
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
|
||||
"Warnings for questionable constructs"));
|
||||
config.setIsReadOnly(true);
|
||||
config.setCommandLineOptions({
|
||||
QStringLiteral("-Wall"),
|
||||
QStringLiteral("-Wextra"),
|
||||
});
|
||||
|
||||
model.appendOrUpdate(config);
|
||||
}
|
||||
|
||||
static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model)
|
||||
{
|
||||
ClangDiagnosticConfig config;
|
||||
config.setId("Builtin.Pedantic");
|
||||
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
|
||||
"Pedantic Warnings"));
|
||||
config.setIsReadOnly(true);
|
||||
config.setCommandLineOptions({QStringLiteral("-Wpedantic")});
|
||||
|
||||
model.appendOrUpdate(config);
|
||||
}
|
||||
|
||||
static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
|
||||
{
|
||||
ClangDiagnosticConfig config;
|
||||
config.setId(Constants::CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS);
|
||||
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
|
||||
"Warnings for almost everything"));
|
||||
config.setIsReadOnly(true);
|
||||
config.setCommandLineOptions({
|
||||
QStringLiteral("-Weverything"),
|
||||
QStringLiteral("-Wno-c++98-compat"),
|
||||
QStringLiteral("-Wno-c++98-compat-pedantic"),
|
||||
QStringLiteral("-Wno-unused-macros"),
|
||||
QStringLiteral("-Wno-newline-eof"),
|
||||
QStringLiteral("-Wno-exit-time-destructors"),
|
||||
QStringLiteral("-Wno-global-constructors"),
|
||||
QStringLiteral("-Wno-gnu-zero-variadic-macro-arguments"),
|
||||
QStringLiteral("-Wno-documentation"),
|
||||
QStringLiteral("-Wno-shadow"),
|
||||
QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
|
||||
});
|
||||
|
||||
model.appendOrUpdate(config);
|
||||
}
|
||||
|
||||
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
|
||||
{
|
||||
addConfigForPedanticWarnings(model);
|
||||
addConfigForQuestionableConstructs(model);
|
||||
addConfigForAlmostEveryWarning(model);
|
||||
}
|
||||
|
||||
ClangDiagnosticConfigsModel::ClangDiagnosticConfigsModel(const ClangDiagnosticConfigs &customConfigs)
|
||||
{
|
||||
addBuiltinConfigs(*this);
|
||||
|
||||
foreach (const ClangDiagnosticConfig &config, customConfigs)
|
||||
m_diagnosticConfigs.append(config);
|
||||
}
|
||||
|
||||
int ClangDiagnosticConfigsModel::size() const
|
||||
{
|
||||
return m_diagnosticConfigs.size();
|
||||
}
|
||||
|
||||
const ClangDiagnosticConfig &ClangDiagnosticConfigsModel::at(int index) const
|
||||
{
|
||||
return m_diagnosticConfigs.at(index);
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsModel::appendOrUpdate(const ClangDiagnosticConfig &config)
|
||||
{
|
||||
const int index = indexOfConfig(config.id());
|
||||
|
||||
if (index >= 0 && index < m_diagnosticConfigs.size())
|
||||
m_diagnosticConfigs.replace(index, config);
|
||||
else
|
||||
m_diagnosticConfigs.append(config);
|
||||
}
|
||||
|
||||
void ClangDiagnosticConfigsModel::removeConfigWithId(const Core::Id &id)
|
||||
{
|
||||
m_diagnosticConfigs.removeOne(configWithId(id));
|
||||
}
|
||||
|
||||
ClangDiagnosticConfigs ClangDiagnosticConfigsModel::configs() const
|
||||
{
|
||||
return m_diagnosticConfigs;
|
||||
}
|
||||
|
||||
const ClangDiagnosticConfig &ClangDiagnosticConfigsModel::configWithId(const Core::Id &id) const
|
||||
{
|
||||
return m_diagnosticConfigs.at(indexOfConfig(id));
|
||||
}
|
||||
|
||||
int ClangDiagnosticConfigsModel::indexOfConfig(const Core::Id &id) const
|
||||
{
|
||||
return Utils::indexOf(m_diagnosticConfigs, [&](const ClangDiagnosticConfig &config) {
|
||||
return config.id() == id;
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace CppTools
|
||||
Reference in New Issue
Block a user