forked from qt-creator/qt-creator
LanguageClient: simplify diagnostic mark creation
Change-Id: I7d6cb17e6e1f41ab007884bb1c32f92086d3067a Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -73,7 +73,11 @@ private:
|
|||||||
|
|
||||||
DiagnosticManager::DiagnosticManager(Client *client)
|
DiagnosticManager::DiagnosticManager(Client *client)
|
||||||
: m_client(client)
|
: m_client(client)
|
||||||
{}
|
{
|
||||||
|
m_textMarkCreator = [this](const FilePath &filePath, const Diagnostic &diagnostic) {
|
||||||
|
return createTextMark(filePath, diagnostic);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
DiagnosticManager::~DiagnosticManager()
|
DiagnosticManager::~DiagnosticManager()
|
||||||
{
|
{
|
||||||
@@ -128,25 +132,9 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version)
|
|||||||
QList<QTextEdit::ExtraSelection> extraSelections;
|
QList<QTextEdit::ExtraSelection> extraSelections;
|
||||||
const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
|
const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri);
|
||||||
if (versionedDiagnostics.version.value_or(version) == version) {
|
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) {
|
for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) {
|
||||||
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
|
extraSelections << toDiagnosticsSelections(diagnostic, doc->document());
|
||||||
if (m_textMarkCreator) {
|
|
||||||
doc->addMark(m_textMarkCreator(filePath, diagnostic));
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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()
|
void DiagnosticManager::clearDiagnostics()
|
||||||
{
|
{
|
||||||
for (const DocumentUri &uri : m_diagnostics.keys())
|
for (const DocumentUri &uri : m_diagnostics.keys())
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ public:
|
|||||||
const HideDiagnosticsHandler &removalHandler);
|
const HideDiagnosticsHandler &removalHandler);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
TextEditor::TextMark *createTextMark(const Utils::FilePath &filePath,
|
||||||
|
const LanguageServerProtocol::Diagnostic &diagnostic) const;
|
||||||
struct VersionedDiagnostics {
|
struct VersionedDiagnostics {
|
||||||
Utils::optional<int> version;
|
Utils::optional<int> version;
|
||||||
QList<LanguageServerProtocol::Diagnostic> diagnostics;
|
QList<LanguageServerProtocol::Diagnostic> diagnostics;
|
||||||
|
|||||||
Reference in New Issue
Block a user