File indexing completed on 2024-04-21 04:38:09

0001 /*
0002     SPDX-FileCopyrightText: 2018 Anton Anikin <anton@anikin.xyz>
0003     SPDX-FileCopyrightText: 2020 Friedrich W. H. Kossebau <kossebau@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "analyzer.h"
0009 
0010 // plugin
0011 #include "plugin.h"
0012 #include "job.h"
0013 #include "checksetselectionmanager.h"
0014 #include "globalsettings.h"
0015 #include "projectsettings.h"
0016 #include "checksdb.h"
0017 // KDevPlatform
0018 #include <interfaces/iproject.h>
0019 #include <util/path.h>
0020 // KF
0021 #include <KLocalizedString>
0022 // Qt
0023 #include <QThread>
0024 
0025 namespace Clazy
0026 {
0027 
0028 Analyzer::Analyzer(Plugin* plugin, CheckSetSelectionManager* checkSetSelectionManager, QObject* parent)
0029     : KDevelop::CompileAnalyzer(plugin,
0030                                 i18n("Clazy"), QStringLiteral("clazy"),
0031                                 QStringLiteral("clazy_file"), QStringLiteral("clazy_project"),
0032                                 QStringLiteral("clazy"),
0033                                 KDevelop::ProblemModel::CanDoFullUpdate |
0034                                 KDevelop::ProblemModel::ScopeFilter |
0035                                 KDevelop::ProblemModel::SeverityFilter |
0036                                 KDevelop::ProblemModel::Grouping |
0037                                 KDevelop::ProblemModel::CanByPassScopeFilter|
0038                                 KDevelop::ProblemModel::ShowSource,
0039                                 parent)
0040     , m_plugin(plugin)
0041     , m_checkSetSelectionManager(checkSetSelectionManager)
0042 {
0043 }
0044 
0045 Analyzer::~Analyzer() = default;
0046 
0047 bool Analyzer::isOutputToolViewPreferred() const
0048 {
0049     return !GlobalSettings::hideOutputView();
0050 }
0051 
0052 KDevelop::CompileAnalyzeJob * Analyzer::createJob(KDevelop::IProject* project,
0053                                                   const KDevelop::Path& buildDirectory,
0054                                                   const QUrl& url, const QStringList& filePaths)
0055 {
0056     ProjectSettings projectSettings;
0057     projectSettings.setSharedConfig(project->projectConfiguration());
0058     projectSettings.load();
0059 
0060     JobParameters params;
0061 
0062     params.executablePath = GlobalSettings::executablePath().toLocalFile();
0063 
0064     params.url = url;
0065     params.filePaths = filePaths;
0066     params.buildDir = buildDirectory.toLocalFile();
0067     QString checkSetSelectionId = projectSettings.checkSetSelection();
0068     if (checkSetSelectionId == QLatin1String("Default")) {
0069         checkSetSelectionId = m_checkSetSelectionManager->defaultCheckSetSelectionId();
0070     }
0071     const auto checks = checkSetSelectionId.isEmpty() ? projectSettings.checks() : m_checkSetSelectionManager->checkSetSelection(checkSetSelectionId).selectionAsString();
0072     if (!checks.isEmpty()) {
0073         params.checks = checks;
0074     } else {
0075         params.checks = ChecksDB::defaultChecks();
0076     }
0077     params.onlyQt = projectSettings.onlyQt();
0078     params.qtDeveloper = projectSettings.qtDeveloper();
0079     params.qt4Compat = projectSettings.qt4Compat();
0080     params.visitImplicitCode = projectSettings.visitImplicitCode();
0081 
0082     params.ignoreIncludedFiles = projectSettings.ignoreIncludedFiles();
0083     params.headerFilter = projectSettings.headerFilter();
0084 
0085     params.enableAllFixits = projectSettings.enableAllFixits();
0086     params.noInplaceFixits = projectSettings.noInplaceFixits();
0087 
0088     params.extraAppend = projectSettings.extraAppend();
0089     params.extraPrepend = projectSettings.extraPrepend();
0090     params.extraClazy = projectSettings.extraClazy();
0091 
0092     params.verboseOutput = GlobalSettings::verboseOutput();
0093 
0094     params.parallelJobCount =
0095         GlobalSettings::parallelJobsEnabled() ?
0096             (GlobalSettings::parallelJobsAutoCount() ?
0097                 QThread::idealThreadCount() :
0098                 GlobalSettings::parallelJobsFixedCount()) :
0099         1;
0100 
0101     auto db = m_plugin->loadedChecksDB();
0102 
0103     return new Job(params, db);
0104 }
0105 
0106 }
0107 
0108 #include "moc_analyzer.cpp"