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:
David Schulz
2020-07-22 14:52:06 +02:00
parent 7f562c4d33
commit e176958da1
24 changed files with 781 additions and 79 deletions

View File

@@ -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);