summaryrefslogtreecommitdiff
path: root/src/plugins/clangcodemodel
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2019-01-28 11:43:18 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2019-01-28 14:00:05 +0000
commite5fbeb62190696ec2a067476a7408f7b2370c154 (patch)
tree9a33b6d505df6f51929b6cd5bfc2363e4acab24c /src/plugins/clangcodemodel
parente648c079b8759707175221c6744430373d2cf954 (diff)
downloadqt-creator-e5fbeb62190696ec2a067476a7408f7b2370c154.tar.gz
Clang: Add API to convert diagnostics to plain text
This is for a follow-up change that will allow to copy the diagnostic text from the tooltip to the clipboard. Change-Id: Iad5343a819c84ca83d562f69dcf2f50e1d4785c4 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel')
-rw-r--r--src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp48
-rw-r--r--src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h6
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp7
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.cpp3
4 files changed, 38 insertions, 26 deletions
diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
index d92b5d67ac..9fcec8d6b5 100644
--- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
+++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
@@ -39,6 +39,7 @@
#include <QFileInfo>
#include <QHash>
#include <QLabel>
+#include <QTextDocument>
#include <QUrl>
using namespace ClangCodeModel;
@@ -101,16 +102,6 @@ public:
bool allowTextSelection;
};
- static QWidget *create(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
- const DisplayHints &displayHints)
- {
- WidgetFromDiagnostics converter(displayHints);
- return converter.createWidget(diagnostics);
- }
-
-private:
- enum class IndentMode { Indent, DoNotIndent };
-
WidgetFromDiagnostics(const DisplayHints &displayHints)
: m_displayHints(displayHints)
{
@@ -177,6 +168,9 @@ private:
return text;
}
+private:
+ enum class IndentMode { Indent, DoNotIndent };
+
static bool isClazyOption(const QString &option) { return option.startsWith("-Wclazy"); }
class DiagnosticTextInfo
@@ -446,18 +440,11 @@ private:
QString m_mainFilePath;
};
-} // anonymous namespace
-
-namespace ClangCodeModel {
-namespace Internal {
-
-QWidget *ClangDiagnosticWidget::create(
- const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
- const Destination &destination)
+WidgetFromDiagnostics::DisplayHints toHints(const ClangDiagnosticWidget::Destination &destination)
{
WidgetFromDiagnostics::DisplayHints hints;
- if (destination == ToolTip) {
+ if (destination == ClangDiagnosticWidget::ToolTip) {
hints.showCategoryAndEnableOption = true;
hints.showFileNameInMainDiagnostic = false;
hints.enableClickableFixits = true;
@@ -474,7 +461,28 @@ QWidget *ClangDiagnosticWidget::create(
hints.allowTextSelection = true;
}
- return WidgetFromDiagnostics::create(diagnostics, hints);
+ return hints;
+}
+
+} // anonymous namespace
+
+namespace ClangCodeModel {
+namespace Internal {
+
+QString ClangDiagnosticWidget::createText(
+ const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
+ const ClangDiagnosticWidget::Destination &destination)
+{
+ const QString htmlText = WidgetFromDiagnostics(toHints(destination)).htmlText(diagnostics);
+ QTextDocument document;
+ document.setHtml(htmlText);
+ return document.toPlainText();
+}
+
+QWidget *ClangDiagnosticWidget::createWidget(
+ const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics, const Destination &destination)
+{
+ return WidgetFromDiagnostics(toHints(destination)).createWidget(diagnostics);
}
} // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h
index 91fdfc67d6..6469a0ff5f 100644
--- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h
+++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.h
@@ -38,8 +38,10 @@ class ClangDiagnosticWidget {
public:
enum Destination { ToolTip, InfoBar };
- static QWidget *create(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
- const Destination &destination);
+ static QString createText(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
+ const Destination &destination);
+ static QWidget *createWidget(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics,
+ const Destination &destination);
};
} // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index f7bf55a242..8e1d06da6c 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -306,7 +306,8 @@ void ClangEditorDocumentProcessor::addDiagnosticToolTipToLayout(uint line,
const QVector<ClangBackEnd::DiagnosticContainer> diagnostics
= m_diagnosticManager.diagnosticsAt(line, column);
- target->addWidget(ClangDiagnosticWidget::create(diagnostics, ClangDiagnosticWidget::ToolTip));
+ target->addWidget(
+ ClangDiagnosticWidget::createWidget(diagnostics, ClangDiagnosticWidget::ToolTip));
auto link = TextEditor::DisplaySettings::createAnnotationSettingsLink();
target->addWidget(link);
target->setAlignment(link, Qt::AlignRight);
@@ -648,8 +649,8 @@ ClangEditorDocumentProcessor::creatorForHeaderErrorDiagnosticWidget(
vbox->setContentsMargins(10, 0, 0, 2);
vbox->setSpacing(2);
- vbox->addWidget(ClangDiagnosticWidget::create({firstHeaderErrorDiagnostic},
- ClangDiagnosticWidget::InfoBar));
+ vbox->addWidget(ClangDiagnosticWidget::createWidget({firstHeaderErrorDiagnostic},
+ ClangDiagnosticWidget::InfoBar));
auto widget = new QWidget;
widget->setLayout(vbox);
diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp
index 51447e9147..0b66305d6e 100644
--- a/src/plugins/clangcodemodel/clangtextmark.cpp
+++ b/src/plugins/clangcodemodel/clangtextmark.cpp
@@ -101,7 +101,8 @@ bool ClangTextMark::addToolTipContent(QLayout *target) const
{
using Internal::ClangDiagnosticWidget;
- QWidget *widget = ClangDiagnosticWidget::create({m_diagnostic}, ClangDiagnosticWidget::ToolTip);
+ QWidget *widget = ClangDiagnosticWidget::createWidget({m_diagnostic},
+ ClangDiagnosticWidget::ToolTip);
target->addWidget(widget);
return true;