// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "languageclient_global.h" #include #include #include #include namespace TextEditor { class TextDocument; class TextMark; } namespace ProjectExplorer { class Task; } namespace LanguageClient { class Client; class LANGUAGECLIENT_EXPORT DiagnosticManager : public QObject { Q_OBJECT public: explicit DiagnosticManager(Client *client); ~DiagnosticManager() override; virtual void setDiagnostics(const Utils::FilePath &filePath, const QList &diagnostics, const std::optional &version); virtual void showDiagnostics(const Utils::FilePath &filePath, int version); virtual void hideDiagnostics(const Utils::FilePath &filePath); virtual QList filteredDiagnostics( const QList &diagnostics) const; void disableDiagnostics(TextEditor::TextDocument *document); void clearDiagnostics(); QList diagnosticsAt( const Utils::FilePath &filePath, const QTextCursor &cursor) const; bool hasDiagnostic(const Utils::FilePath &filePath, const TextEditor::TextDocument *doc, const LanguageServerProtocol::Diagnostic &diag) const; bool hasDiagnostics(const TextEditor::TextDocument *doc) const; signals: void textMarkCreated(const Utils::FilePath &path); protected: Client *client() const; virtual TextEditor::TextMark *createTextMark(TextEditor::TextDocument *doc, const LanguageServerProtocol::Diagnostic &diagnostic, bool isProjectFile) const; virtual std::optional createTask( TextEditor::TextDocument *doc, const LanguageServerProtocol::Diagnostic &diagnostic, bool isProjectFile) const; virtual QString taskText(const LanguageServerProtocol::Diagnostic &diagnostic) const; void setTaskCategory(const Utils::Id &taskCategory); // enables task creations for diagnostics outside of the clients project (default: on) void setForceCreateTasks(bool forceCreateTasks); virtual QTextEdit::ExtraSelection createDiagnosticSelection( const LanguageServerProtocol::Diagnostic &diagnostic, QTextDocument *textDocument) const; void setExtraSelectionsId(const Utils::Id &extraSelectionsId); void forAllMarks(std::function func); private: class DiagnosticManagerPrivate; std::unique_ptr d; }; } // namespace LanguageClient