diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index a24ea0458eb..bd5dcfdcbf5 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -34,6 +34,9 @@ #include #include +#include +#include +#include #include using namespace LanguageServerProtocol; @@ -122,8 +125,19 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri) const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri); const int docRevision = doc->document()->revision(); if (versionedDiagnostics.version.value_or(docRevision) == docRevision) { + const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon()); + const QString tooltip = tr("Copy to Clipboard"); for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) { - doc->addMark(new TextMark(filePath, diagnostic, m_clientId)); + QAction *action = new QAction(); + action->setIcon(icon); + action->setToolTip(tooltip); + QObject::connect(action, &QAction::triggered, [text = diagnostic.message()]() { + QApplication::clipboard()->setText(text); + }); + auto mark = new TextMark(filePath, diagnostic, m_clientId); + mark->setActions({action}); + + doc->addMark(mark); extraSelections << toDiagnosticsSelections(diagnostic, doc->document()); } } diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index 3483c976f21..dcd292a17f0 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -37,6 +37,7 @@ namespace LanguageClient { class DiagnosticManager { + Q_DECLARE_TR_FUNCTIONS(LanguageClient::DiagnosticManager) public: explicit DiagnosticManager(const Utils::Id &clientId); ~DiagnosticManager();