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"