forked from qt-creator/qt-creator
ClangTools: Add automatic clang tool runner for open documents
Fixes: QTCREATORBUG-23349 Change-Id: I81197180c9d69c7df6184f8fcbf05f2256eaf7f6 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include "clangtoolsconstants.h"
|
||||
#include "clangtoolsprojectsettings.h"
|
||||
#include "clangtoolsprojectsettingswidget.h"
|
||||
#include "documentclangtoolrunner.h"
|
||||
#include "settingswidget.h"
|
||||
|
||||
#ifdef WITH_TESTS
|
||||
@@ -84,6 +85,7 @@ class ClangToolsPluginPrivate
|
||||
public:
|
||||
ClangTool clangTool;
|
||||
ClangToolsOptionsPage optionsPage;
|
||||
QMap<Core::IDocument *, DocumentClangToolRunner *> documentRunners;
|
||||
};
|
||||
|
||||
ClangToolsPlugin::~ClangToolsPlugin()
|
||||
@@ -111,9 +113,28 @@ bool ClangToolsPlugin::initialize(const QStringList &arguments, QString *errorSt
|
||||
panelFactory->setCreateWidgetFunction([](Project *project) { return new ProjectSettingsWidget(project); });
|
||||
ProjectPanelFactory::registerFactory(panelFactory);
|
||||
|
||||
connect(Core::EditorManager::instance(),
|
||||
&Core::EditorManager::currentEditorChanged,
|
||||
this,
|
||||
&ClangToolsPlugin::onCurrentEditorChanged);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ClangToolsPlugin::onCurrentEditorChanged()
|
||||
{
|
||||
for (Core::IEditor *editor : Core::EditorManager::visibleEditors()) {
|
||||
IDocument *document = editor->document();
|
||||
if (d->documentRunners.contains(document))
|
||||
continue;
|
||||
auto runner = new DocumentClangToolRunner(document);
|
||||
connect(runner, &DocumentClangToolRunner::destroyed, this, [this, document]() {
|
||||
d->documentRunners.remove(document);
|
||||
});
|
||||
d->documentRunners[document] = runner;
|
||||
}
|
||||
}
|
||||
|
||||
void ClangToolsPlugin::registerAnalyzeActions()
|
||||
{
|
||||
ActionManager::registerAction(d->clangTool.startAction(), Constants::RUN_ON_PROJECT);
|
||||
|
||||
Reference in New Issue
Block a user