LanguageClient: export DiagnosticManager

Change-Id: I60b3e6b14bf364da60fb8b3de6d5d5cc1cd2e634
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-04-01 07:34:49 +02:00
parent 929e40a9f2
commit e437cf7a71
6 changed files with 92 additions and 70 deletions

View File

@@ -75,9 +75,6 @@ private:
DiagnosticManager::DiagnosticManager(Client *client)
: m_client(client)
{
m_textMarkCreator = [this](const FilePath &filePath, const Diagnostic &diagnostic, bool /*isProjectFile*/) {
return createTextMark(filePath, diagnostic);
};
}
DiagnosticManager::~DiagnosticManager()
@@ -85,20 +82,16 @@ DiagnosticManager::~DiagnosticManager()
clearDiagnostics();
}
void DiagnosticManager::setDiagnostics(const LanguageServerProtocol::DocumentUri &uri,
const QList<LanguageServerProtocol::Diagnostic> &diagnostics,
void DiagnosticManager::setDiagnostics(const DocumentUri &uri,
const QList<Diagnostic> &diagnostics,
const Utils::optional<int> &version)
{
hideDiagnostics(uri.toFilePath());
const QList<Diagnostic> filteredDiags = m_filter
? Utils::filtered(diagnostics, m_filter) : diagnostics;
m_diagnostics[uri] = {version, filteredDiags};
m_diagnostics[uri] = {version, filteredDiagnostics(diagnostics)};
}
void DiagnosticManager::hideDiagnostics(const Utils::FilePath &filePath)
{
if (m_hideHandler)
m_hideHandler();
if (auto doc = TextDocument::textDocumentForFilePath(filePath)) {
for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc))
editor->editorWidget()->setExtraSelections(TextEditorWidget::CodeWarningsSelection, {});
@@ -106,6 +99,11 @@ void DiagnosticManager::hideDiagnostics(const Utils::FilePath &filePath)
qDeleteAll(m_marks.take(filePath));
}
QList<Diagnostic> DiagnosticManager::filteredDiagnostics(const QList<Diagnostic> &diagnostics) const
{
return diagnostics;
}
static QTextEdit::ExtraSelection toDiagnosticsSelections(const Diagnostic &diagnostic,
QTextDocument *textDocument)
{
@@ -134,8 +132,10 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
&& m_client->project()->isKnownFile(filePath);
for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) {
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
marks.append(m_textMarkCreator(filePath, diagnostic, isProjectFile));
marks.append(createTextMark(filePath, diagnostic, isProjectFile));
}
if (!marks.isEmpty())
emit textMarkCreated(filePath);
}
for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc)) {
@@ -146,7 +146,8 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
}
TextEditor::TextMark *DiagnosticManager::createTextMark(const FilePath &filePath,
const Diagnostic &diagnostic) const
const Diagnostic &diagnostic,
bool isProjectFile) const
{
static const auto icon = QIcon::fromTheme("edit-copy", Utils::Icons::COPY.icon());
static const QString tooltip = tr("Copy to Clipboard");
@@ -202,13 +203,4 @@ bool DiagnosticManager::hasDiagnostic(const LanguageServerProtocol::DocumentUri
return it->diagnostics.contains(diag);
}
void DiagnosticManager::setDiagnosticsHandlers(const TextMarkCreator &textMarkCreator,
const HideDiagnosticsHandler &removalHandler,
const DiagnosticsFilter &filter)
{
m_textMarkCreator = textMarkCreator;
m_hideHandler = removalHandler;
m_filter = filter;
}
} // namespace LanguageClient