Clang: Reduce diagnostic visualization for non-project files further

We already avoided showing inline annotations for diagnostics in
non-project files. But given many diagnostics the visualization is still
quite noisy. E.g. consider opening not self-contained header files or
files for which we do not have any project open, as it can happen if the
debugger jumps to such a file.

So leave only the text mark icon on the left and avoid all the rest:
underlines and refactoring icons in the editor, marks in the scrollbar
and task hub issues.

Change-Id: I05245981b21b38be650489a006593922dcb6896d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-05-09 13:37:51 +02:00
parent e7123b140e
commit f46fb39f3c
4 changed files with 20 additions and 10 deletions

View File

@@ -314,6 +314,9 @@ void ClangDiagnosticManager::generateFixItAvailableMarkers()
{ {
m_fixItAvailableMarkers.clear(); m_fixItAvailableMarkers.clear();
if (!m_fullVisualization)
return;
QSet<int> lineNumbersWithFixItMarker; QSet<int> lineNumbersWithFixItMarker;
addFixItAvailableMarker(m_warningDiagnostics, lineNumbersWithFixItMarker); addFixItAvailableMarker(m_warningDiagnostics, lineNumbersWithFixItMarker);
addFixItAvailableMarker(m_errorDiagnostics, lineNumbersWithFixItMarker); addFixItAvailableMarker(m_errorDiagnostics, lineNumbersWithFixItMarker);
@@ -360,6 +363,9 @@ void ClangDiagnosticManager::clearTaskHubIssues()
void ClangDiagnosticManager::generateTaskHubIssues() void ClangDiagnosticManager::generateTaskHubIssues()
{ {
if (!m_fullVisualization)
return;
const QVector<ClangBackEnd::DiagnosticContainer> diagnostics = m_errorDiagnostics const QVector<ClangBackEnd::DiagnosticContainer> diagnostics = m_errorDiagnostics
+ m_warningDiagnostics; + m_warningDiagnostics;
for (const ClangBackEnd::DiagnosticContainer &diagnostic : diagnostics) { for (const ClangBackEnd::DiagnosticContainer &diagnostic : diagnostics) {
@@ -431,16 +437,19 @@ void ClangDiagnosticManager::generateEditorSelections()
m_extraSelections.clear(); m_extraSelections.clear();
m_extraSelections.reserve(int(m_warningDiagnostics.size() + m_errorDiagnostics.size())); m_extraSelections.reserve(int(m_warningDiagnostics.size() + m_errorDiagnostics.size()));
if (!m_fullVisualization)
return;
addWarningSelections(m_warningDiagnostics, m_textDocument->document(), m_extraSelections); addWarningSelections(m_warningDiagnostics, m_textDocument->document(), m_extraSelections);
addErrorSelections(m_errorDiagnostics, m_textDocument->document(), m_extraSelections); addErrorSelections(m_errorDiagnostics, m_textDocument->document(), m_extraSelections);
} }
void ClangDiagnosticManager::processNewDiagnostics( void ClangDiagnosticManager::processNewDiagnostics(
const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics, const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics,
bool showTextMarkAnnotations) bool fullVisualization)
{ {
m_diagnosticsInvalidated = false; m_diagnosticsInvalidated = false;
m_showTextMarkAnnotations = showTextMarkAnnotations; m_fullVisualization = fullVisualization;
filterDiagnostics(allDiagnostics); filterDiagnostics(allDiagnostics);
generateEditorSelections(); generateEditorSelections();
@@ -478,7 +487,7 @@ void ClangDiagnosticManager::addClangTextMarks(
auto textMark = new ClangTextMark(::Utils::FileName::fromString(filePath()), auto textMark = new ClangTextMark(::Utils::FileName::fromString(filePath()),
diagnostic, diagnostic,
onMarkRemoved, onMarkRemoved,
m_showTextMarkAnnotations); m_fullVisualization);
m_clangTextMarks.push_back(textMark); m_clangTextMarks.push_back(textMark);
m_textDocument->addMark(textMark); m_textDocument->addMark(textMark);
} }

View File

@@ -51,7 +51,7 @@ public:
~ClangDiagnosticManager(); ~ClangDiagnosticManager();
void processNewDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics, void processNewDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics,
bool showTextMarkAnnotations); bool fullVisualization);
const QVector<ClangBackEnd::DiagnosticContainer> &diagnosticsWithFixIts() const; const QVector<ClangBackEnd::DiagnosticContainer> &diagnosticsWithFixIts() const;
QList<QTextEdit::ExtraSelection> takeExtraSelections(); QList<QTextEdit::ExtraSelection> takeExtraSelections();
@@ -88,7 +88,7 @@ private:
std::vector<ClangTextMark *> m_clangTextMarks; std::vector<ClangTextMark *> m_clangTextMarks;
bool m_firstDiagnostics = true; bool m_firstDiagnostics = true;
bool m_diagnosticsInvalidated = false; bool m_diagnosticsInvalidated = false;
bool m_showTextMarkAnnotations = false; bool m_fullVisualization = false;
QTimer m_textMarkDelay; QTimer m_textMarkDelay;
}; };

View File

@@ -68,7 +68,7 @@ static Core::Id categoryForSeverity(ClangBackEnd::DiagnosticSeverity severity)
ClangTextMark::ClangTextMark(const FileName &fileName, ClangTextMark::ClangTextMark(const FileName &fileName,
const ClangBackEnd::DiagnosticContainer &diagnostic, const ClangBackEnd::DiagnosticContainer &diagnostic,
const RemovedFromEditorHandler &removedHandler, const RemovedFromEditorHandler &removedHandler,
bool showLineAnnotations) bool fullVisualization)
: TextEditor::TextMark(fileName, : TextEditor::TextMark(fileName,
int(diagnostic.location.line), int(diagnostic.location.line),
categoryForSeverity(diagnostic.severity)) categoryForSeverity(diagnostic.severity))
@@ -76,15 +76,16 @@ ClangTextMark::ClangTextMark(const FileName &fileName,
, m_removedFromEditorHandler(removedHandler) , m_removedFromEditorHandler(removedHandler)
{ {
const bool warning = isWarningOrNote(diagnostic.severity); const bool warning = isWarningOrNote(diagnostic.severity);
setColor(warning ? ::Utils::Theme::ClangCodeModel_Warning_TextMarkColor
: ::Utils::Theme::ClangCodeModel_Error_TextMarkColor);
setDefaultToolTip(warning ? QApplication::translate("Clang Code Model Marks", "Code Model Warning") setDefaultToolTip(warning ? QApplication::translate("Clang Code Model Marks", "Code Model Warning")
: QApplication::translate("Clang Code Model Marks", "Code Model Error")); : QApplication::translate("Clang Code Model Marks", "Code Model Error"));
setPriority(warning ? TextEditor::TextMark::NormalPriority setPriority(warning ? TextEditor::TextMark::NormalPriority
: TextEditor::TextMark::HighPriority); : TextEditor::TextMark::HighPriority);
updateIcon(); updateIcon();
if (showLineAnnotations) if (fullVisualization) {
setLineAnnotation(Utils::diagnosticCategoryPrefixRemoved(diagnostic.text.toString())); setLineAnnotation(Utils::diagnosticCategoryPrefixRemoved(diagnostic.text.toString()));
setColor(warning ? ::Utils::Theme::ClangCodeModel_Warning_TextMarkColor
: ::Utils::Theme::ClangCodeModel_Error_TextMarkColor);
}
} }
void ClangTextMark::updateIcon(bool valid) void ClangTextMark::updateIcon(bool valid)

View File

@@ -42,7 +42,7 @@ public:
ClangTextMark(const ::Utils::FileName &fileName, ClangTextMark(const ::Utils::FileName &fileName,
const ClangBackEnd::DiagnosticContainer &diagnostic, const ClangBackEnd::DiagnosticContainer &diagnostic,
const RemovedFromEditorHandler &removedHandler, const RemovedFromEditorHandler &removedHandler,
bool showLineAnnotations); bool fullVisualization);
void updateIcon(bool valid = true); void updateIcon(bool valid = true);
private: private: