File indexing completed on 2024-04-28 04:38:10
0001 /* 0002 SPDX-FileCopyrightText: 2016 Carlos Nihelton <carlosnsoliveira@gmail.com> 0003 SPDX-FileCopyrightText: 2018, 2020 Friedrich W. H. Kossebau <kossebau@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "plugin.h" 0009 0010 // plugin 0011 #include <clangtidyconfig.h> 0012 #include <clangtidyprojectconfig.h> 0013 #include "config/clangtidypreferences.h" 0014 #include "config/clangtidyprojectconfigpage.h" 0015 #include "analyzer.h" 0016 #include "checksetselectionmanager.h" 0017 // KDevPlatform 0018 #include <interfaces/contextmenuextension.h> 0019 #include <project/projectconfigpage.h> 0020 #include <util/path.h> 0021 // KF 0022 #include <KLocalizedString> 0023 #include <KPluginFactory> 0024 0025 using namespace KDevelop; 0026 0027 K_PLUGIN_FACTORY_WITH_JSON(ClangTidyFactory, "kdevclangtidy.json", 0028 registerPlugin<ClangTidy::Plugin>();) 0029 0030 namespace ClangTidy 0031 { 0032 0033 Plugin::Plugin(QObject* parent, const QVariantList& /*unused*/) 0034 : IPlugin(QStringLiteral("kdevclangtidy"), parent) 0035 , m_checkSetSelectionManager(new CheckSetSelectionManager) 0036 { 0037 setXMLFile(QStringLiteral("kdevclangtidy.rc")); 0038 0039 // create after ui.rc file is set with action ids 0040 m_analyzer = new Analyzer(this, m_checkSetSelectionManager, this); 0041 0042 auto clangTidyPath = KDevelop::Path(ClangTidySettings::clangtidyPath()).toLocalFile(); 0043 0044 // TODO: not only collect on plugin loading, but also on every change in the settings 0045 // TODO: should also check version on every job start to see if there was an update 0046 // behind our back while kdevelop running 0047 // TODO: collect in async job 0048 m_checkSet.setClangTidyPath(clangTidyPath); 0049 } 0050 0051 Plugin::~Plugin() = default; 0052 0053 void Plugin::unload() 0054 { 0055 delete m_checkSetSelectionManager; 0056 m_checkSetSelectionManager = nullptr; 0057 delete m_analyzer; 0058 m_analyzer = nullptr; 0059 } 0060 0061 ContextMenuExtension Plugin::contextMenuExtension(Context* context, QWidget* parent) 0062 { 0063 ContextMenuExtension extension = KDevelop::IPlugin::contextMenuExtension(context, parent); 0064 0065 m_analyzer->fillContextMenuExtension(extension, context, parent); 0066 0067 return extension; 0068 } 0069 0070 KDevelop::ConfigPage* Plugin::perProjectConfigPage(int number, const ProjectConfigOptions& options, QWidget* parent) 0071 { 0072 if (number != 0) { 0073 return nullptr; 0074 } 0075 0076 // ensure checkset is up-to-date TODO: async 0077 auto clangTidyPath = KDevelop::Path(ClangTidySettings::clangtidyPath()).toLocalFile(); 0078 m_checkSet.setClangTidyPath(clangTidyPath); 0079 0080 return new ProjectConfigPage(this, options.project, m_checkSetSelectionManager, &m_checkSet, parent); 0081 } 0082 0083 KDevelop::ConfigPage* Plugin::configPage(int number, QWidget* parent) 0084 { 0085 if (number != 0) { 0086 return nullptr; 0087 } 0088 0089 // ensure checkset is up-to-date TODO: async 0090 auto clangTidyPath = KDevelop::Path(ClangTidySettings::clangtidyPath()).toLocalFile(); 0091 m_checkSet.setClangTidyPath(clangTidyPath); 0092 0093 return new ClangTidyPreferences(m_checkSetSelectionManager, &m_checkSet, this, parent); 0094 } 0095 0096 } // namespace ClangTidy 0097 0098 #include "plugin.moc" 0099 #include "moc_plugin.cpp"