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 <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-01-28 14:50:12 +01:00
parent 26a6cf3bb3
commit c35977ce7b

View File

@@ -380,11 +380,9 @@ static QVariant iconData(const QString &type)
return QVariant(); return QVariant();
} }
static QString withLineColumnPrefixed(const QString &text, static QString lineColumnString(const Debugger::DiagnosticLocation &location)
const Debugger::DiagnosticLocation &location)
{ {
return QString("%1:%2: %3") return QString("%1:%2").arg(QString::number(location.line), QString::number(location.column));
.arg(QString::number(location.line), QString::number(location.column), text);
} }
QVariant DiagnosticItem::data(int column, int role) const QVariant DiagnosticItem::data(int column, int role) const
@@ -428,7 +426,8 @@ QVariant DiagnosticItem::data(int column, int role) const
case ClangToolsDiagnosticModel::TextRole: case ClangToolsDiagnosticModel::TextRole:
return m_diagnostic.description; return m_diagnostic.description;
case Qt::DisplayRole: 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: case Qt::ToolTipRole:
return createDiagnosticToolTipString(m_diagnostic); return createDiagnosticToolTipString(m_diagnostic);
case Qt::DecorationRole: case Qt::DecorationRole:
@@ -495,6 +494,11 @@ static QVariant iconForExplainingStepMessage(const QString &message)
return iconData(message.mid(0, index)); return iconData(message.mid(0, index));
} }
static QString rangeString(const QVector<Debugger::DiagnosticLocation> &ranges)
{
return QString("%1-%2").arg(lineColumnString(ranges[0]), lineColumnString(ranges[1]));
}
QVariant ExplainingStepItem::data(int column, int role) const QVariant ExplainingStepItem::data(int column, int role) const
{ {
if (column == DiagnosticView::FixItColumn) if (column == DiagnosticView::FixItColumn)
@@ -511,11 +515,28 @@ QVariant ExplainingStepItem::data(int column, int role) const
return m_step.message; return m_step.message;
case ClangToolsDiagnosticModel::DiagnosticRole: case ClangToolsDiagnosticModel::DiagnosticRole:
return QVariant::fromValue(static_cast<DiagnosticItem *>(parent())->diagnostic()); return QVariant::fromValue(static_cast<DiagnosticItem *>(parent())->diagnostic());
case Qt::DisplayRole: case Qt::DisplayRole: {
return m_step.message; 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: case Qt::ToolTipRole:
return createExplainingStepToolTipString(m_step); return createExplainingStepToolTipString(m_step);
case Qt::DecorationRole: case Qt::DecorationRole:
if (m_step.isFixIt)
return Utils::Icons::CODEMODEL_FIXIT.icon();
return iconForExplainingStepMessage(m_step.message); return iconForExplainingStepMessage(m_step.message);
default: default:
return QVariant(); return QVariant();