Cppcheck: Fix handling of settings

We need to distinguish between the global settings and the
settings used for a manual analyzer run.

Fixes: QTCREATORBUG-28951
Fixes: QTCREATORBUG-30615
Change-Id: Ic2dabd14e4d06d77bebcedd9e653f54a4d179c82
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Christian Stenger
2024-06-14 09:05:49 +02:00
parent 8a7402c7cd
commit 36531a1068
5 changed files with 31 additions and 28 deletions

View File

@@ -52,7 +52,9 @@ ManualRunDialog::ManualRunDialog(const ProjectExplorer::Project *project)
analyzeButton->setEnabled(m_model->hasCheckedFiles());
});
auto optionsWidget = settings().layouter()().emerge();
m_manualRunSettings.readSettings();
m_manualRunSettings.setAutoApply(true);
auto optionsWidget = m_manualRunSettings.layouter()().emerge();
auto layout = new QVBoxLayout(this);
layout->addWidget(optionsWidget);

View File

@@ -3,6 +3,8 @@
#pragma once
#include "cppchecksettings.h"
#include <QDialog>
namespace Utils {
@@ -25,8 +27,10 @@ public:
Utils::FilePaths filePaths() const;
QSize sizeHint() const override;
const CppcheckSettings &manualRunSettings() const { return m_manualRunSettings; }
private:
ProjectExplorer::SelectableFilesFromDirModel *m_model;
CppcheckSettings m_manualRunSettings;
};
} // Cppcheck::Internal

View File

@@ -56,9 +56,9 @@ public:
CppcheckPluginPrivate::CppcheckPluginPrivate()
{
tool.updateOptions();
tool.updateOptions(settings());
connect(&settings(), &AspectContainer::changed, this, [this] {
tool.updateOptions();
tool.updateOptions(settings());
trigger.recheck();
});
@@ -112,8 +112,6 @@ void CppcheckPluginPrivate::startManualRun()
if (!project)
return;
manualRunTool.updateOptions();
ManualRunDialog dialog(project);
if (dialog.exec() == ManualRunDialog::Rejected)
return;
@@ -125,7 +123,7 @@ void CppcheckPluginPrivate::startManualRun()
return;
manualRunTool.setProject(project);
manualRunTool.updateOptions();
manualRunTool.updateOptions(dialog.manualRunSettings());
manualRunTool.check(files);
perspective.select();
}

View File

@@ -39,10 +39,10 @@ CppcheckTool::CppcheckTool(CppcheckDiagnosticManager &manager, const Id &progres
CppcheckTool::~CppcheckTool() = default;
void CppcheckTool::updateOptions()
void CppcheckTool::updateOptions(const CppcheckSettings &settings)
{
m_filters.clear();
for (const QString &pattern : settings().ignoredPatterns().split(',')) {
for (const QString &pattern : settings.ignoredPatterns().split(',')) {
const QString trimmedPattern = pattern.trimmed();
if (trimmedPattern.isEmpty())
continue;
@@ -52,56 +52,54 @@ void CppcheckTool::updateOptions()
m_filters.push_back(re);
}
updateArguments();
updateArguments(settings);
}
void CppcheckTool::setProject(ProjectExplorer::Project *project)
{
m_project = project;
updateArguments();
updateArguments(settings());
}
void CppcheckTool::updateArguments()
void CppcheckTool::updateArguments(const CppcheckSettings &settings)
{
if (!m_project)
return;
m_cachedAdditionalArguments.clear();
CppcheckSettings &s = settings();
QStringList arguments;
if (!s.customArguments().isEmpty()) {
if (!settings.customArguments().isEmpty()) {
Utils::MacroExpander *expander = Utils::globalMacroExpander();
const QString expanded = expander->expand(s.customArguments());
const QString expanded = expander->expand(settings.customArguments());
arguments.push_back(expanded);
}
if (s.warning())
if (settings.warning())
arguments.push_back("--enable=warning");
if (s.style())
if (settings.style())
arguments.push_back("--enable=style");
if (s.performance())
if (settings.performance())
arguments.push_back("--enable=performance");
if (s.portability())
if (settings.portability())
arguments.push_back("--enable=portability");
if (s.information())
if (settings.information())
arguments.push_back("--enable=information");
if (s.unusedFunction())
if (settings.unusedFunction())
arguments.push_back("--enable=unusedFunction");
if (s.missingInclude())
if (settings.missingInclude())
arguments.push_back("--enable=missingInclude");
if (s.inconclusive())
if (settings.inconclusive())
arguments.push_back("--inconclusive");
if (s.forceDefines())
if (settings.forceDefines())
arguments.push_back("--force");
if (!s.unusedFunction() && !s.customArguments().contains("-j "))
if (!settings.unusedFunction() && !settings.customArguments().contains("-j "))
arguments.push_back("-j " + QString::number(QThread::idealThreadCount()));
arguments.push_back("--template=\"{file},{line},{severity},{id},{message}\"");
m_runner->reconfigure(s.binary.effectiveBinary(), arguments.join(' '));
m_runner->reconfigure(settings.binary.effectiveBinary(), arguments.join(' '));
}
QStringList CppcheckTool::additionalArguments(const CppEditor::ProjectPart &part) const

View File

@@ -24,6 +24,7 @@ namespace Cppcheck::Internal {
class CppcheckRunner;
class CppcheckDiagnosticManager;
class CppcheckSettings;
class CppcheckTool final : public QObject
{
@@ -33,7 +34,7 @@ public:
CppcheckTool(CppcheckDiagnosticManager &manager, const Utils::Id &progressId);
~CppcheckTool() override;
void updateOptions();
void updateOptions(const CppcheckSettings &settings);
void setProject(ProjectExplorer::Project *project);
void check(const Utils::FilePaths &files);
void stop(const Utils::FilePaths &files);
@@ -45,7 +46,7 @@ public:
void finishWithFail(const QString &exitMessage);
private:
void updateArguments();
void updateArguments(const CppcheckSettings &settings);
void addToQueue(const Utils::FilePaths &files, const CppEditor::ProjectPart &part);
QStringList additionalArguments(const CppEditor::ProjectPart &part) const;