From c92deea33fa5e819ef3e324fb15b11ff1935fd69 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 12 Oct 2021 13:44:35 +0200 Subject: [PATCH] ClangCodeModel: Provide source of diagnostics in tooltip It's helpful to know whether a particular issue came from clangd, libclang, or somewhere else. Change-Id: I9e00d79ffe630a91028c2aeff219571e9979dbee Reviewed-by: David Schulz --- .../clangdiagnostictooltipwidget.cpp | 24 +++++++++++++------ .../clangdiagnostictooltipwidget.h | 3 ++- .../clangeditordocumentprocessor.cpp | 3 ++- src/plugins/clangcodemodel/clangtextmark.cpp | 4 ++-- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp index ffdd3c43969..195c4f4ead9 100644 --- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp +++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp @@ -104,9 +104,9 @@ public: } QWidget *createWidget(const QVector &diagnostics, - const std::function &canApplyFixIt) + const std::function &canApplyFixIt, const QString &source) { - const QString text = htmlText(diagnostics); + const QString text = htmlText(diagnostics, source); auto *label = new QLabel; label->setTextFormat(Qt::RichText); @@ -154,13 +154,20 @@ public: return label; } - QString htmlText(const QVector &diagnostics) + QString htmlText(const QVector &diagnostics, + const QString &source) { // For debugging, add: style='border-width:1px;border-color:black' QString text = ""; foreach (const ClangBackEnd::DiagnosticContainer &diagnostic, diagnostics) text.append(tableRows(diagnostic)); + if (!source.isEmpty()) { + text.append(QString::fromUtf8("") + .arg(QCoreApplication::translate("ClangDiagnosticWidget", "[Source: %1]")) + .arg(source)); + } text.append("
" + "%1
"); @@ -396,7 +403,8 @@ QString ClangDiagnosticWidget::createText( const QVector &diagnostics, const ClangDiagnosticWidget::Destination &destination) { - const QString htmlText = WidgetFromDiagnostics(toHints(destination, {})).htmlText(diagnostics); + const QString htmlText = WidgetFromDiagnostics(toHints(destination, {})) + .htmlText(diagnostics, {}); QTextDocument document; document.setHtml(htmlText); @@ -410,11 +418,13 @@ QString ClangDiagnosticWidget::createText( return text; } -QWidget *ClangDiagnosticWidget::createWidget(const QVector &diagnostics, - const Destination &destination, const std::function &canApplyFixIt) +QWidget *ClangDiagnosticWidget::createWidget( + const QVector &diagnostics, + const Destination &destination, const std::function &canApplyFixIt, + const QString &source) { return WidgetFromDiagnostics(toHints(destination, canApplyFixIt)) - .createWidget(diagnostics, canApplyFixIt); + .createWidget(diagnostics, canApplyFixIt, source); } } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h index afe35812ae0..92f98a59cae 100644 --- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h +++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h @@ -48,7 +48,8 @@ public: static QWidget *createWidget(const QVector &diagnostics, const Destination &destination, - const std::function &canApplyFixIt); + const std::function &canApplyFixIt, + const QString &source); }; } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index a9d4f01c726..94a44085056 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -506,7 +506,8 @@ ClangEditorDocumentProcessor::creatorForHeaderErrorDiagnosticWidget( vbox->setSpacing(2); vbox->addWidget(ClangDiagnosticWidget::createWidget({firstHeaderErrorDiagnostic}, - ClangDiagnosticWidget::InfoBar, {})); + ClangDiagnosticWidget::InfoBar, {}, + "libclang")); auto widget = new QWidget; widget->setLayout(vbox); diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index 38227008a9b..01cfae6ae6f 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -281,7 +281,7 @@ bool ClangTextMark::addToolTipContent(QLayout *target) const && diagMgr->diagnosticsWithFixIts().contains(diag); }; QWidget *widget = ClangDiagnosticWidget::createWidget( - {m_diagnostic}, ClangDiagnosticWidget::ToolTip, canApplyFixIt); + {m_diagnostic}, ClangDiagnosticWidget::ToolTip, canApplyFixIt, "libclang"); target->addWidget(widget); return true; @@ -398,7 +398,7 @@ bool ClangdTextMark::addToolTipContent(QLayout *target) const return c && c->reachable() && c->hasDiagnostic(DocumentUri::fromFilePath(fp), diag); }; target->addWidget(ClangDiagnosticWidget::createWidget({m_diagnostic}, - ClangDiagnosticWidget::ToolTip, canApplyFixIt)); + ClangDiagnosticWidget::ToolTip, canApplyFixIt, "clangd")); return true; }