ClangCodeModel: Provide diagnostics via clangd

Change-Id: Ib45a62ebe200c2b56a1bb1a66f8a92103e60d092
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-06-02 17:51:31 +02:00
parent 54b4022987
commit 7bf52b0c0d
15 changed files with 320 additions and 48 deletions

View File

@@ -91,6 +91,8 @@ void DiagnosticManager::hideDiagnostics(TextDocument *doc)
if (!doc)
return;
if (m_hideHandler)
m_hideHandler();
for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc))
editor->editorWidget()->setExtraSelections(TextEditorWidget::CodeWarningsSelection, {});
qDeleteAll(Utils::filtered(doc->marks(), Utils::equal(&TextMark::category, m_clientId)));
@@ -127,6 +129,12 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int 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);
@@ -137,7 +145,6 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
mark->setActions({action});
doc->addMark(mark);
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
}
}
@@ -168,4 +175,26 @@ QList<Diagnostic> DiagnosticManager::diagnosticsAt(const DocumentUri &uri,
});
}
bool DiagnosticManager::hasDiagnostic(const LanguageServerProtocol::DocumentUri &uri,
const TextDocument *doc,
const LanguageServerProtocol::Diagnostic &diag) const
{
if (!doc)
return false;
const auto it = m_diagnostics.find(uri);
if (it == m_diagnostics.end())
return {};
const int revision = doc->document()->revision();
if (revision != it->version.value_or(revision))
return false;
return it->diagnostics.contains(diag);
}
void DiagnosticManager::setDiagnosticsHandlers(const TextMarkCreator &textMarkCreator,
const HideDiagnosticsHandler &removalHandler)
{
m_textMarkCreator = textMarkCreator;
m_hideHandler = removalHandler;
}
} // namespace LanguageClient