From c35977ce7b9fb36fac95d81b1ea822028fe30f11 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 28 Jan 2019 14:50:12 +0100 Subject: [PATCH] ClangTools: Make fixit items more user-friendly ...by providing an icon and a text describing what will be done. Change-Id: I923c4d593314c903adcbd831028fef5e69d28783 Reviewed-by: Ivan Donchevskii --- .../clangtools/clangtoolsdiagnosticmodel.cpp | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp index 719324b3594..00bf9112b95 100644 --- a/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp +++ b/src/plugins/clangtools/clangtoolsdiagnosticmodel.cpp @@ -380,11 +380,9 @@ static QVariant iconData(const QString &type) return QVariant(); } -static QString withLineColumnPrefixed(const QString &text, - const Debugger::DiagnosticLocation &location) +static QString lineColumnString(const Debugger::DiagnosticLocation &location) { - return QString("%1:%2: %3") - .arg(QString::number(location.line), QString::number(location.column), text); + return QString("%1:%2").arg(QString::number(location.line), QString::number(location.column)); } QVariant DiagnosticItem::data(int column, int role) const @@ -428,7 +426,8 @@ QVariant DiagnosticItem::data(int column, int role) const case ClangToolsDiagnosticModel::TextRole: return m_diagnostic.description; case Qt::DisplayRole: - return withLineColumnPrefixed(m_diagnostic.description, m_diagnostic.location); + return QString("%1: %2").arg(lineColumnString(m_diagnostic.location), + m_diagnostic.description); case Qt::ToolTipRole: return createDiagnosticToolTipString(m_diagnostic); case Qt::DecorationRole: @@ -495,6 +494,11 @@ static QVariant iconForExplainingStepMessage(const QString &message) return iconData(message.mid(0, index)); } +static QString rangeString(const QVector &ranges) +{ + return QString("%1-%2").arg(lineColumnString(ranges[0]), lineColumnString(ranges[1])); +} + QVariant ExplainingStepItem::data(int column, int role) const { if (column == DiagnosticView::FixItColumn) @@ -511,11 +515,28 @@ QVariant ExplainingStepItem::data(int column, int role) const return m_step.message; case ClangToolsDiagnosticModel::DiagnosticRole: return QVariant::fromValue(static_cast(parent())->diagnostic()); - case Qt::DisplayRole: - return m_step.message; + case Qt::DisplayRole: { + if (m_step.isFixIt) { + if (m_step.ranges[0] == m_step.ranges[1]) { + return QString("%1: Insertion of \"%2\".") + .arg(lineColumnString(m_step.location), m_step.message); + } + if (m_step.message.isEmpty()) { + return QString("%1: Removal of %2.") + .arg(lineColumnString(m_step.location), rangeString(m_step.ranges)); + } + return QString("%1: Replacement of %2 with: \"%3\".") + .arg(lineColumnString(m_step.location), + rangeString(m_step.ranges), + m_step.message); + } + return QString("%1: %2").arg(lineColumnString(m_step.location), m_step.message); + } case Qt::ToolTipRole: return createExplainingStepToolTipString(m_step); case Qt::DecorationRole: + if (m_step.isFixIt) + return Utils::Icons::CODEMODEL_FIXIT.icon(); return iconForExplainingStepMessage(m_step.message); default: return QVariant();