LanguageClient: simplify diagnostic mark creation

Change-Id: I7d6cb17e6e1f41ab007884bb1c32f92086d3067a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2021-12-07 09:24:31 +01:00
parent 4751e9a771
commit df46c478dc
2 changed files with 24 additions and 18 deletions

View File

@@ -73,7 +73,11 @@ private:
DiagnosticManager::DiagnosticManager(Client *client)
: m_client(client)
{}
{
m_textMarkCreator = [this](const FilePath &filePath, const Diagnostic &diagnostic) {
return createTextMark(filePath, diagnostic);
};
}
DiagnosticManager::~DiagnosticManager()
{
@@ -128,25 +132,9 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
QList<QTextEdit::ExtraSelection> extraSelections;
const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
if (versionedDiagnostics.version.value_or(version) == version) {
const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
const QString tooltip = tr("Copy to Clipboard");
for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) {
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
if (m_textMarkCreator) {
doc->addMark(m_textMarkCreator(filePath, diagnostic));
continue;
}
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_client->id());
mark->setActions({action});
doc->addMark(mark);
doc->addMark(m_textMarkCreator(filePath, diagnostic));
}
}
@@ -157,6 +145,22 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
}
}
TextEditor::TextMark *DiagnosticManager::createTextMark(const FilePath &filePath,
const Diagnostic &diagnostic) const
{
static const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
static const QString tooltip = tr("Copy to Clipboard");
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_client->id());
mark->setActions({action});
return mark;
}
void DiagnosticManager::clearDiagnostics()
{
for (const DocumentUri &uri : m_diagnostics.keys())

View File

@@ -74,6 +74,8 @@ public:
const HideDiagnosticsHandler &removalHandler);
private:
TextEditor::TextMark *createTextMark(const Utils::FilePath &filePath,
const LanguageServerProtocol::Diagnostic &diagnostic) const;
struct VersionedDiagnostics {
Utils::optional<int> version;
QList<LanguageServerProtocol::Diagnostic> diagnostics;