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

@@ -452,6 +452,10 @@ public:
const QStringList &options() const { return m_options; } const QStringList &options() const { return m_options; }
const Core::Id &diagnosticConfigId() const { return m_diagnosticConfigId; } const Core::Id &diagnosticConfigId() const { return m_diagnosticConfigId; }
CppTools::UseBuildSystemWarnings useBuildSystemWarnings() const
{
return m_useBuildSystemWarnings;
}
private: private:
void addLanguageOptions() void addLanguageOptions()
@@ -491,6 +495,9 @@ private:
void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig) void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig)
{ {
m_diagnosticConfigId = diagnosticConfig.id(); m_diagnosticConfigId = diagnosticConfig.id();
m_useBuildSystemWarnings = diagnosticConfig.useBuildSystemWarnings()
? CppTools::UseBuildSystemWarnings::Yes
: CppTools::UseBuildSystemWarnings::No;
m_options.append(diagnosticConfig.clangOptions()); m_options.append(diagnosticConfig.clangOptions());
addClangTidyOptions(diagnosticConfig); addClangTidyOptions(diagnosticConfig);
@@ -565,6 +572,7 @@ private:
const CppTools::ProjectPart &m_projectPart; const CppTools::ProjectPart &m_projectPart;
Core::Id m_diagnosticConfigId; Core::Id m_diagnosticConfigId;
CppTools::UseBuildSystemWarnings m_useBuildSystemWarnings = CppTools::UseBuildSystemWarnings::No;
CppTools::CompilerOptionsBuilder m_builder; CppTools::CompilerOptionsBuilder m_builder;
QStringList m_options; QStringList m_options;
}; };
@@ -586,13 +594,13 @@ void ClangEditorDocumentProcessor::updateBackendDocument(CppTools::ProjectPart &
return; return;
} }
const QStringList projectPartOptions = ClangCodeModel::Utils::createClangOptions(
projectPart,
CppTools::ProjectFile::Unsupported); // No language option as FileOptionsBuilder adds it.
const FileOptionsBuilder fileOptions(filePath(), projectPart); const FileOptionsBuilder fileOptions(filePath(), projectPart);
m_diagnosticConfigId = fileOptions.diagnosticConfigId(); m_diagnosticConfigId = fileOptions.diagnosticConfigId();
const QStringList projectPartOptions = ClangCodeModel::Utils::createClangOptions(
projectPart, fileOptions.useBuildSystemWarnings(),
CppTools::ProjectFile::Unsupported); // No language option as FileOptionsBuilder adds it.
const QStringList compilationArguments = projectPartOptions + fileOptions.options(); const QStringList compilationArguments = projectPartOptions + fileOptions.options();
m_communicator.documentsOpened( m_communicator.documentsOpened(

View File

@@ -66,11 +66,13 @@ namespace Utils {
class LibClangOptionsBuilder final : public CompilerOptionsBuilder class LibClangOptionsBuilder final : public CompilerOptionsBuilder
{ {
public: public:
LibClangOptionsBuilder(const ProjectPart &projectPart) LibClangOptionsBuilder(const ProjectPart &projectPart,
UseBuildSystemWarnings useBuildSystemWarnings)
: CompilerOptionsBuilder(projectPart, : CompilerOptionsBuilder(projectPart,
UseSystemHeader::No, UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseTweakedHeaderPaths::Yes,
UseLanguageDefines::No, UseLanguageDefines::No,
useBuildSystemWarnings,
QString(CLANG_VERSION), QString(CLANG_VERSION),
QString(CLANG_RESOURCE_DIR)) QString(CLANG_RESOURCE_DIR))
{ {
@@ -101,9 +103,12 @@ private:
} }
}; };
QStringList createClangOptions(const ProjectPart &projectPart, ProjectFile::Kind fileKind) QStringList createClangOptions(const ProjectPart &projectPart,
UseBuildSystemWarnings useBuildSystemWarnings,
ProjectFile::Kind fileKind)
{ {
return LibClangOptionsBuilder(projectPart).build(fileKind, UsePrecompiledHeaders::No); return LibClangOptionsBuilder(projectPart, useBuildSystemWarnings)
.build(fileKind, UsePrecompiledHeaders::No);
} }
ProjectPart::Ptr projectPartForFile(const QString &filePath) ProjectPart::Ptr projectPartForFile(const QString &filePath)

View File

@@ -28,6 +28,7 @@
#include <cplusplus/Icons.h> #include <cplusplus/Icons.h>
#include <cpptools/projectpart.h> #include <cpptools/projectpart.h>
#include <cpptools/compileroptionsbuilder.h>
#include <QTextCursor> #include <QTextCursor>
@@ -53,6 +54,7 @@ CppTools::CppEditorDocumentHandle *cppDocument(const QString &filePath);
void setLastSentDocumentRevision(const QString &filePath, uint revision); void setLastSentDocumentRevision(const QString &filePath, uint revision);
QStringList createClangOptions(const CppTools::ProjectPart &projectPart, QStringList createClangOptions(const CppTools::ProjectPart &projectPart,
CppTools::UseBuildSystemWarnings useBuildSystemWarnings,
CppTools::ProjectFile::Kind fileKind); CppTools::ProjectFile::Kind fileKind);
CppTools::ProjectPart::Ptr projectPartForFile(const QString &filePath); CppTools::ProjectPart::Ptr projectPartForFile(const QString &filePath);

View File

@@ -195,6 +195,7 @@ static AnalyzeUnits toAnalyzeUnits(const FileInfos &fileInfos)
UseSystemHeader::No, UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseTweakedHeaderPaths::Yes,
UseLanguageDefines::No, UseLanguageDefines::No,
UseBuildSystemWarnings::No,
QString(CLANG_VERSION), QString(CLANG_VERSION),
QString(CLANG_RESOURCE_DIR)); QString(CLANG_RESOURCE_DIR));
QStringList arguments = extraClangToolsPrependOptions(); QStringList arguments = extraClangToolsPrependOptions();

View File

@@ -24,6 +24,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="useFlagsFromBuildSystemCheckBox">
<property name="text">
<string>Use diagnostic flags from build system</string>
</property>
</widget>
</item>
<item> <item>
<widget class="CppTools::WrappableLineEdit" name="diagnosticOptionsTextEdit"/> <widget class="CppTools::WrappableLineEdit" name="diagnosticOptionsTextEdit"/>
</item> </item>

View File

@@ -75,7 +75,8 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const
&& m_clangTidyMode == other.m_clangTidyMode && m_clangTidyMode == other.m_clangTidyMode
&& m_clangTidyChecks == other.m_clangTidyChecks && m_clangTidyChecks == other.m_clangTidyChecks
&& m_clazyChecks == other.m_clazyChecks && m_clazyChecks == other.m_clazyChecks
&& m_isReadOnly == other.m_isReadOnly; && m_isReadOnly == other.m_isReadOnly
&& m_useBuildSystemWarnings == other.m_useBuildSystemWarnings;
} }
bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const
@@ -83,6 +84,16 @@ bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const
return !(*this == other); return !(*this == other);
} }
bool ClangDiagnosticConfig::useBuildSystemWarnings() const
{
return m_useBuildSystemWarnings;
}
void ClangDiagnosticConfig::setUseBuildSystemWarnings(bool useBuildSystemWarnings)
{
m_useBuildSystemWarnings = useBuildSystemWarnings;
}
ClangDiagnosticConfig::TidyMode ClangDiagnosticConfig::clangTidyMode() const ClangDiagnosticConfig::TidyMode ClangDiagnosticConfig::clangTidyMode() const
{ {
return m_clangTidyMode; return m_clangTidyMode;

View File

@@ -65,6 +65,9 @@ public:
bool isReadOnly() const; bool isReadOnly() const;
void setIsReadOnly(bool isReadOnly); void setIsReadOnly(bool isReadOnly);
bool useBuildSystemWarnings() const;
void setUseBuildSystemWarnings(bool useBuildSystemWarnings);
bool operator==(const ClangDiagnosticConfig &other) const; bool operator==(const ClangDiagnosticConfig &other) const;
bool operator!=(const ClangDiagnosticConfig &other) const; bool operator!=(const ClangDiagnosticConfig &other) const;
@@ -76,6 +79,7 @@ private:
QString m_clangTidyChecks; QString m_clangTidyChecks;
QString m_clazyChecks; QString m_clazyChecks;
bool m_isReadOnly = false; bool m_isReadOnly = false;
bool m_useBuildSystemWarnings = false;
}; };
using ClangDiagnosticConfigs = QVector<ClangDiagnosticConfig>; using ClangDiagnosticConfigs = QVector<ClangDiagnosticConfig>;

View File

@@ -162,6 +162,18 @@ static void addConfigForTidyAndClazy(ClangDiagnosticConfigsModel &model)
model.appendOrUpdate(config); model.appendOrUpdate(config);
} }
static void addConfigForBuildSystem(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId("Builtin.BuildSystem");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Build-systems' warnings"));
config.setIsReadOnly(true);
config.setUseBuildSystemWarnings(true);
model.appendOrUpdate(config);
}
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model) static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
{ {
addConfigForPedanticWarnings(model); addConfigForPedanticWarnings(model);
@@ -171,6 +183,7 @@ static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
addConfigForClangAnalyze(model); addConfigForClangAnalyze(model);
addConfigForClazy(model); addConfigForClazy(model);
addConfigForTidyAndClazy(model); addConfigForTidyAndClazy(model);
addConfigForBuildSystem(model);
} }
ClangDiagnosticConfigsModel::ClangDiagnosticConfigsModel(const ClangDiagnosticConfigs &customConfigs) ClangDiagnosticConfigsModel::ClangDiagnosticConfigsModel(const ClangDiagnosticConfigs &customConfigs)

View File

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

View File

@@ -77,7 +77,7 @@ private:
void onClazyTreeChanged(); void onClazyTreeChanged();
void onClangTidyTreeItemClicked(const QModelIndex &index); void onClangTidyTreeItemClicked(const QModelIndex &index);
void onDiagnosticOptionsEdited(); void onClangOnlyOptionsChanged();
void syncWidgetsToModel(const Core::Id &configToSelect = Core::Id()); void syncWidgetsToModel(const Core::Id &configToSelect = Core::Id());
void syncConfigChooserToModel(const Core::Id &configToSelect = Core::Id()); void syncConfigChooserToModel(const Core::Id &configToSelect = Core::Id());
@@ -104,8 +104,8 @@ private:
void connectConfigChooserCurrentIndex(); void connectConfigChooserCurrentIndex();
void disconnectConfigChooserCurrentIndex(); void disconnectConfigChooserCurrentIndex();
void connectDiagnosticOptionsChanged(); void connectClangOnlyOptionsChanged();
void disconnectDiagnosticOptionsChanged(); void disconnectClangOnlyOptionsChanged();
private: private:
Ui::ClangDiagnosticConfigsWidget *m_ui; Ui::ClangDiagnosticConfigsWidget *m_ui;

View File

@@ -99,12 +99,14 @@ CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart,
UseSystemHeader useSystemHeader, UseSystemHeader useSystemHeader,
UseTweakedHeaderPaths useTweakedHeaderPaths, UseTweakedHeaderPaths useTweakedHeaderPaths,
UseLanguageDefines useLanguageDefines, UseLanguageDefines useLanguageDefines,
UseBuildSystemWarnings useBuildSystemWarnings,
const QString &clangVersion, const QString &clangVersion,
const QString &clangResourceDirectory) const QString &clangResourceDirectory)
: m_projectPart(projectPart) : m_projectPart(projectPart)
, m_useSystemHeader(useSystemHeader) , m_useSystemHeader(useSystemHeader)
, m_useTweakedHeaderPaths(useTweakedHeaderPaths) , m_useTweakedHeaderPaths(useTweakedHeaderPaths)
, m_useLanguageDefines(useLanguageDefines) , m_useLanguageDefines(useLanguageDefines)
, m_useBuildSystemWarnings(useBuildSystemWarnings)
, m_clangVersion(clangVersion) , m_clangVersion(clangVersion)
, m_clangResourceDirectory(clangResourceDirectory) , m_clangResourceDirectory(clangResourceDirectory)
{ {
@@ -707,10 +709,11 @@ void CompilerOptionsBuilder::evaluateCompilerFlags()
continue; continue;
} }
// Ignore warning flags as these interfere with ouser user-configured diagnostics. // Ignore warning flags as these interfere with our user-configured diagnostics.
// Note that once "-w" is provided, no warnings will be emitted, even if "-Wall" follows. // Note that once "-w" is provided, no warnings will be emitted, even if "-Wall" follows.
if (option.startsWith("-w", Qt::CaseInsensitive) if (m_useBuildSystemWarnings == UseBuildSystemWarnings::No
|| option.startsWith("/w", Qt::CaseInsensitive) || option.startsWith("-pedantic")) { && (option.startsWith("-w", Qt::CaseInsensitive)
|| option.startsWith("/w", Qt::CaseInsensitive) || option.startsWith("-pedantic"))) {
// -w, -W, /w, /W... // -w, -W, /w, /W...
continue; continue;
} }

View File

@@ -36,6 +36,7 @@ enum class UseSystemHeader : char { Yes, No };
enum class UseTweakedHeaderPaths : char { Yes, No }; enum class UseTweakedHeaderPaths : char { Yes, No };
enum class UseToolchainMacros : char { Yes, No }; enum class UseToolchainMacros : char { Yes, No };
enum class UseLanguageDefines : char { Yes, No }; enum class UseLanguageDefines : char { Yes, No };
enum class UseBuildSystemWarnings : char { Yes, No };
CPPTOOLS_EXPORT QStringList XclangArgs(const QStringList &args); CPPTOOLS_EXPORT QStringList XclangArgs(const QStringList &args);
CPPTOOLS_EXPORT QStringList clangArgsForCl(const QStringList &args); CPPTOOLS_EXPORT QStringList clangArgsForCl(const QStringList &args);
@@ -43,12 +44,14 @@ CPPTOOLS_EXPORT QStringList clangArgsForCl(const QStringList &args);
class CPPTOOLS_EXPORT CompilerOptionsBuilder class CPPTOOLS_EXPORT CompilerOptionsBuilder
{ {
public: public:
CompilerOptionsBuilder(const ProjectPart &projectPart, CompilerOptionsBuilder(
UseSystemHeader useSystemHeader = UseSystemHeader::No, const ProjectPart &projectPart,
UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::No, UseSystemHeader useSystemHeader = UseSystemHeader::No,
UseLanguageDefines useLanguageDefines = UseLanguageDefines::No, UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::No,
const QString &clangVersion = QString(), UseLanguageDefines useLanguageDefines = UseLanguageDefines::No,
const QString &clangResourceDirectory = QString()); UseBuildSystemWarnings useBuildSystemWarnings = UseBuildSystemWarnings::No,
const QString &clangVersion = QString(),
const QString &clangResourceDirectory = QString());
QStringList build(ProjectFile::Kind fileKind, UsePrecompiledHeaders usePrecompiledHeaders); QStringList build(ProjectFile::Kind fileKind, UsePrecompiledHeaders usePrecompiledHeaders);
QStringList options() const { return m_options; } QStringList options() const { return m_options; }
@@ -99,6 +102,7 @@ private:
const UseSystemHeader m_useSystemHeader; const UseSystemHeader m_useSystemHeader;
const UseTweakedHeaderPaths m_useTweakedHeaderPaths; const UseTweakedHeaderPaths m_useTweakedHeaderPaths;
const UseLanguageDefines m_useLanguageDefines; const UseLanguageDefines m_useLanguageDefines;
const UseBuildSystemWarnings m_useBuildSystemWarnings;
const QString m_clangVersion; const QString m_clangVersion;
const QString m_clangResourceDirectory; const QString m_clangResourceDirectory;

View File

@@ -98,6 +98,22 @@ TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_UnknownOptionsAreForwarded
ASSERT_THAT(compilerOptionsBuilder.options(), Contains(part.compilerFlags.first())); ASSERT_THAT(compilerOptionsBuilder.options(), Contains(part.compilerFlags.first()));
} }
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_WarningsFlagsAreNotFilteredIfRequested)
{
ProjectPart part = projectPart;
part.compilerFlags = QStringList{"-Whello"};
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{part,
CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::No,
CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::Yes};
compilerOptionsBuilder.build(ProjectFile::CXXSource, CppTools::UsePrecompiledHeaders::No);
ASSERT_THAT(compilerOptionsBuilder.options(), Contains(part.compilerFlags.first()));
}
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_DiagnosticOptionsAreRemoved) TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_DiagnosticOptionsAreRemoved)
{ {
ProjectPart part = projectPart; ProjectPart part = projectPart;
@@ -171,6 +187,7 @@ TEST_F(CompilerOptionsBuilder, HeaderPathOptionsOrder)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""}; ""};
@@ -196,6 +213,7 @@ TEST_F(CompilerOptionsBuilder, HeaderPathOptionsOrderCl)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""}; ""};
compilerOptionsBuilder.evaluateCompilerFlags(); compilerOptionsBuilder.evaluateCompilerFlags();
@@ -221,6 +239,7 @@ TEST_F(CompilerOptionsBuilder, UseSystemHeader)
CppTools::UseSystemHeader::Yes, CppTools::UseSystemHeader::Yes,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""}; ""};
@@ -265,6 +284,7 @@ TEST_F(CompilerOptionsBuilder, ClangHeadersAndCppIncludesPathsOrderMacOs)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");
@@ -310,6 +330,7 @@ TEST_F(CompilerOptionsBuilder, ClangHeadersAndCppIncludesPathsOrderLinux)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");
@@ -356,6 +377,7 @@ TEST_F(CompilerOptionsBuilder, ClangHeadersAndCppIncludesPathsOrderNoVersion)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");
@@ -403,6 +425,7 @@ TEST_F(CompilerOptionsBuilder, ClangHeadersAndCppIncludesPathsOrderAndroidClang)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");
@@ -480,6 +503,7 @@ TEST_F(CompilerOptionsBuilder, InsertWrappedQtHeaders)
CppTools::UseSystemHeader::Yes, CppTools::UseSystemHeader::Yes,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""}; ""};
@@ -613,6 +637,7 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptions)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");
@@ -652,6 +677,7 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptionsCl)
CppTools::UseSystemHeader::No, CppTools::UseSystemHeader::No,
CppTools::UseTweakedHeaderPaths::Yes, CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::No, CppTools::UseLanguageDefines::No,
CppTools::UseBuildSystemWarnings::No,
"dummy_version", "dummy_version",
""); "");