| 102 | } |
| 103 | |
| 104 | void ProblemNavigationContext::html(IProblem::Ptr problem) |
| 105 | { |
| 106 | modifyHtml() += QStringLiteral("<table><tr>"); |
| 107 | |
| 108 | modifyHtml() += QStringLiteral("<td valign=\"middle\">%1</td>") |
| 109 | .arg(htmlImg(IProblem::iconForSeverity(problem->severity()), QStyle::PM_LargeIconSize)); |
| 110 | |
| 111 | // BEGIN: right column |
| 112 | modifyHtml() += QStringLiteral("<td>"); |
| 113 | |
| 114 | modifyHtml() += i18n("Problem in <i>%1</i>", problem->sourceString()); |
| 115 | modifyHtml() += QStringLiteral("<br/>"); |
| 116 | |
| 117 | if (m_flags & ShowLocation) { |
| 118 | modifyHtml() += labelHighlight(i18n("Location: ")); |
| 119 | makeLink(QStringLiteral("%1 :%2") |
| 120 | .arg(problem->finalLocation().document.toUrl().fileName()) |
| 121 | .arg(problem->finalLocation().start().line() + 1), |
| 122 | QString(), |
| 123 | NavigationAction(problem->finalLocation().document.toUrl(), problem->finalLocation().start()) |
| 124 | ); |
| 125 | |
| 126 | modifyHtml() += QStringLiteral("<br/>"); |
| 127 | } |
| 128 | |
| 129 | QString description = escapedHtml(problem->description()); |
| 130 | QString explanation = escapedHtml(problem->explanation()); |
| 131 | |
| 132 | modifyHtml() += description; |
| 133 | |
| 134 | // Add only non-empty explanation which differs from the problem description. |
| 135 | // Skip this if we have more than one problem. |
| 136 | if (m_problems.size() == 1 && !explanation.isEmpty() && explanation != description) |
| 137 | modifyHtml() += QLatin1String("<p><i style=\"white-space:pre-wrap\">") + explanation + |
| 138 | QLatin1String("</i></p>"); |
| 139 | |
| 140 | modifyHtml() += QStringLiteral("</td>"); |
| 141 | // END: right column |
| 142 | |
| 143 | modifyHtml() += QStringLiteral("</tr></table>"); |
| 144 | |
| 145 | const auto diagnostics = problem->diagnostics(); |
| 146 | if (!diagnostics.isEmpty()) { |
| 147 | DUChainReadLocker lock; |
| 148 | for (auto diagnostic : diagnostics) { |
| 149 | modifyHtml() += QStringLiteral("<p>"); |
| 150 | modifyHtml() += labelHighlight(QStringLiteral("%1: ").arg(diagnostic->severityString())); |
| 151 | modifyHtml() += escapedHtml(diagnostic->description()); |
| 152 | |
| 153 | const DocumentRange range = diagnostic->finalLocation(); |
| 154 | Declaration* declaration = DUChainUtils::itemUnderCursor(range.document.toUrl(), range.start()).declaration; |
| 155 | if (declaration) { |
| 156 | modifyHtml() += i18n("<br>See: "); |
| 157 | makeLink(declaration->toString(), DeclarationPointer(declaration), |
| 158 | NavigationAction::NavigateDeclaration); |
| 159 | modifyHtml() += i18n(" in "); |
| 160 | const auto url = declaration->url().toUrl(); |
| 161 | makeLink(QStringLiteral("%1 :%2") |
nothing calls this directly
no test coverage detected