forked from qt-creator/qt-creator
Clang: Gray out diagnostics on document change
When reparses take a while, this is helpful. Change-Id: Ie2003a3d65b30d944d20fa19dd4161412182851c Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/proxyaction.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/theme/theme.h>
|
||||
|
||||
#include <QFileInfo>
|
||||
#include <QTextBlock>
|
||||
@@ -347,6 +348,19 @@ ClangDiagnosticManager::diagnosticsAt(uint line, uint column) const
|
||||
return diagnostics;
|
||||
}
|
||||
|
||||
void ClangDiagnosticManager::invalidateDiagnostics()
|
||||
{
|
||||
if (m_diagnosticsInvalidated)
|
||||
return;
|
||||
|
||||
m_diagnosticsInvalidated = true;
|
||||
for (ClangTextMark *textMark : m_clangTextMarks) {
|
||||
textMark->setColor(::Utils::Theme::Color::IconsDisabledColor);
|
||||
textMark->updateIcon(/*valid=*/ false);
|
||||
textMark->updateMarker();
|
||||
}
|
||||
}
|
||||
|
||||
void ClangDiagnosticManager::clearDiagnosticsWithFixIts()
|
||||
{
|
||||
m_fixItdiagnostics.clear();
|
||||
@@ -364,6 +378,7 @@ void ClangDiagnosticManager::generateEditorSelections()
|
||||
void ClangDiagnosticManager::processNewDiagnostics(
|
||||
const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics)
|
||||
{
|
||||
m_diagnosticsInvalidated = false;
|
||||
filterDiagnostics(allDiagnostics);
|
||||
|
||||
generateTextMarks();
|
||||
|
@@ -58,6 +58,7 @@ public:
|
||||
bool hasDiagnosticsAt(uint line, uint column) const;
|
||||
QVector<ClangBackEnd::DiagnosticContainer> diagnosticsAt(uint line, uint column) const;
|
||||
|
||||
void invalidateDiagnostics();
|
||||
void clearDiagnosticsWithFixIts();
|
||||
|
||||
private:
|
||||
@@ -80,6 +81,7 @@ private:
|
||||
QList<QTextEdit::ExtraSelection> m_extraSelections;
|
||||
TextEditor::RefactorMarkers m_fixItAvailableMarkers;
|
||||
std::vector<ClangTextMark *> m_clangTextMarks;
|
||||
bool m_diagnosticsInvalidated = false;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -281,6 +281,11 @@ void ClangEditorDocumentProcessor::editorDocumentTimerRestarted()
|
||||
m_updateTranslationUnitTimer.stop(); // Wait for the next call to run().
|
||||
}
|
||||
|
||||
void ClangEditorDocumentProcessor::invalidateDiagnostics()
|
||||
{
|
||||
m_diagnosticManager.invalidateDiagnostics();
|
||||
}
|
||||
|
||||
void ClangEditorDocumentProcessor::setParserConfig(
|
||||
const CppTools::BaseEditorDocumentParser::Configuration config)
|
||||
{
|
||||
|
@@ -77,6 +77,7 @@ public:
|
||||
TextEditor::QuickFixOperations
|
||||
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface) override;
|
||||
|
||||
void invalidateDiagnostics() override;
|
||||
bool hasDiagnosticsAt(uint line, uint column) const override;
|
||||
void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *target) const override;
|
||||
|
||||
|
@@ -78,23 +78,29 @@ ClangTextMark::ClangTextMark(const QString &fileName,
|
||||
: QApplication::translate("Clang Code Model Marks", "Code Model Error"));
|
||||
setPriority(warning ? TextEditor::TextMark::NormalPriority
|
||||
: TextEditor::TextMark::HighPriority);
|
||||
setIcon(diagnostic.severity());
|
||||
updateIcon();
|
||||
setLineAnnotation(diagnostic.text().toString());
|
||||
}
|
||||
|
||||
void ClangTextMark::setIcon(ClangBackEnd::DiagnosticSeverity severity)
|
||||
void ClangTextMark::updateIcon(bool valid)
|
||||
{
|
||||
static const QIcon errorIcon = Utils::Icon({
|
||||
{QLatin1String(":/clangcodemodel/images/error.png"), Utils::Theme::IconsErrorColor}
|
||||
}, Utils::Icon::Tint).icon();
|
||||
static const QIcon warningIcon = Utils::Icon({
|
||||
{QLatin1String(":/clangcodemodel/images/warning.png"), Utils::Theme::IconsWarningColor}
|
||||
}, Utils::Icon::Tint).icon();
|
||||
static const QIcon errorIcon = Utils::Icon(
|
||||
{{":/clangcodemodel/images/error.png", Utils::Theme::IconsErrorColor}},
|
||||
Utils::Icon::Tint).icon();
|
||||
static const QIcon warningIcon = Utils::Icon(
|
||||
{{":/clangcodemodel/images/warning.png", Utils::Theme::IconsWarningColor}},
|
||||
Utils::Icon::Tint).icon();
|
||||
static const QIcon invalidErrorIcon = Utils::Icon(
|
||||
{{":/clangcodemodel/images/error.png", Utils::Theme::IconsDisabledColor}},
|
||||
Utils::Icon::Tint).icon();
|
||||
static const QIcon invalidWarningIcon = Utils::Icon(
|
||||
{{":/clangcodemodel/images/warning.png", Utils::Theme::IconsDisabledColor}},
|
||||
Utils::Icon::Tint).icon();
|
||||
|
||||
if (isWarningOrNote(severity))
|
||||
TextMark::setIcon(warningIcon);
|
||||
if (isWarningOrNote(m_diagnostic.severity()))
|
||||
setIcon(valid ? warningIcon : invalidWarningIcon);
|
||||
else
|
||||
TextMark::setIcon(errorIcon);
|
||||
setIcon(valid ? errorIcon : invalidErrorIcon);
|
||||
}
|
||||
|
||||
bool ClangTextMark::addToolTipContent(QLayout *target) const
|
||||
|
@@ -43,8 +43,8 @@ public:
|
||||
const ClangBackEnd::DiagnosticContainer &diagnostic,
|
||||
const RemovedFromEditorHandler &removedHandler);
|
||||
|
||||
void updateIcon(bool valid = true);
|
||||
private:
|
||||
void setIcon(ClangBackEnd::DiagnosticSeverity severity);
|
||||
bool addToolTipContent(QLayout *target) const override;
|
||||
void removedFromEditor() override;
|
||||
|
||||
|
@@ -257,6 +257,8 @@ void CppEditorDocument::scheduleProcessDocument()
|
||||
|
||||
void CppEditorDocument::processDocument()
|
||||
{
|
||||
processor()->invalidateDiagnostics();
|
||||
|
||||
if (processor()->isParserRunning() || m_processorRevision != contentsRevision()) {
|
||||
m_processorTimer.start();
|
||||
processor()->editorDocumentTimerRestarted();
|
||||
|
@@ -87,6 +87,10 @@ void BaseEditorDocumentProcessor::editorDocumentTimerRestarted()
|
||||
{
|
||||
}
|
||||
|
||||
void BaseEditorDocumentProcessor::invalidateDiagnostics()
|
||||
{
|
||||
}
|
||||
|
||||
void BaseEditorDocumentProcessor::setParserConfig(
|
||||
const BaseEditorDocumentParser::Configuration config)
|
||||
{
|
||||
|
@@ -66,6 +66,7 @@ public:
|
||||
virtual TextEditor::QuickFixOperations
|
||||
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface);
|
||||
|
||||
virtual void invalidateDiagnostics();
|
||||
virtual bool hasDiagnosticsAt(uint line, uint column) const;
|
||||
virtual void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *layout) const;
|
||||
|
||||
|
Reference in New Issue
Block a user