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/fileutils.h>
|
||||||
#include <utils/proxyaction.h>
|
#include <utils/proxyaction.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/theme/theme.h>
|
||||||
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QTextBlock>
|
#include <QTextBlock>
|
||||||
@@ -347,6 +348,19 @@ ClangDiagnosticManager::diagnosticsAt(uint line, uint column) const
|
|||||||
return diagnostics;
|
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()
|
void ClangDiagnosticManager::clearDiagnosticsWithFixIts()
|
||||||
{
|
{
|
||||||
m_fixItdiagnostics.clear();
|
m_fixItdiagnostics.clear();
|
||||||
@@ -364,6 +378,7 @@ void ClangDiagnosticManager::generateEditorSelections()
|
|||||||
void ClangDiagnosticManager::processNewDiagnostics(
|
void ClangDiagnosticManager::processNewDiagnostics(
|
||||||
const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics)
|
const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics)
|
||||||
{
|
{
|
||||||
|
m_diagnosticsInvalidated = false;
|
||||||
filterDiagnostics(allDiagnostics);
|
filterDiagnostics(allDiagnostics);
|
||||||
|
|
||||||
generateTextMarks();
|
generateTextMarks();
|
||||||
|
@@ -58,6 +58,7 @@ public:
|
|||||||
bool hasDiagnosticsAt(uint line, uint column) const;
|
bool hasDiagnosticsAt(uint line, uint column) const;
|
||||||
QVector<ClangBackEnd::DiagnosticContainer> diagnosticsAt(uint line, uint column) const;
|
QVector<ClangBackEnd::DiagnosticContainer> diagnosticsAt(uint line, uint column) const;
|
||||||
|
|
||||||
|
void invalidateDiagnostics();
|
||||||
void clearDiagnosticsWithFixIts();
|
void clearDiagnosticsWithFixIts();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -80,6 +81,7 @@ private:
|
|||||||
QList<QTextEdit::ExtraSelection> m_extraSelections;
|
QList<QTextEdit::ExtraSelection> m_extraSelections;
|
||||||
TextEditor::RefactorMarkers m_fixItAvailableMarkers;
|
TextEditor::RefactorMarkers m_fixItAvailableMarkers;
|
||||||
std::vector<ClangTextMark *> m_clangTextMarks;
|
std::vector<ClangTextMark *> m_clangTextMarks;
|
||||||
|
bool m_diagnosticsInvalidated = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -281,6 +281,11 @@ void ClangEditorDocumentProcessor::editorDocumentTimerRestarted()
|
|||||||
m_updateTranslationUnitTimer.stop(); // Wait for the next call to run().
|
m_updateTranslationUnitTimer.stop(); // Wait for the next call to run().
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClangEditorDocumentProcessor::invalidateDiagnostics()
|
||||||
|
{
|
||||||
|
m_diagnosticManager.invalidateDiagnostics();
|
||||||
|
}
|
||||||
|
|
||||||
void ClangEditorDocumentProcessor::setParserConfig(
|
void ClangEditorDocumentProcessor::setParserConfig(
|
||||||
const CppTools::BaseEditorDocumentParser::Configuration config)
|
const CppTools::BaseEditorDocumentParser::Configuration config)
|
||||||
{
|
{
|
||||||
|
@@ -77,6 +77,7 @@ public:
|
|||||||
TextEditor::QuickFixOperations
|
TextEditor::QuickFixOperations
|
||||||
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface) override;
|
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface) override;
|
||||||
|
|
||||||
|
void invalidateDiagnostics() override;
|
||||||
bool hasDiagnosticsAt(uint line, uint column) const override;
|
bool hasDiagnosticsAt(uint line, uint column) const override;
|
||||||
void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *target) 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"));
|
: 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);
|
||||||
setIcon(diagnostic.severity());
|
updateIcon();
|
||||||
setLineAnnotation(diagnostic.text().toString());
|
setLineAnnotation(diagnostic.text().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangTextMark::setIcon(ClangBackEnd::DiagnosticSeverity severity)
|
void ClangTextMark::updateIcon(bool valid)
|
||||||
{
|
{
|
||||||
static const QIcon errorIcon = Utils::Icon({
|
static const QIcon errorIcon = Utils::Icon(
|
||||||
{QLatin1String(":/clangcodemodel/images/error.png"), Utils::Theme::IconsErrorColor}
|
{{":/clangcodemodel/images/error.png", Utils::Theme::IconsErrorColor}},
|
||||||
}, Utils::Icon::Tint).icon();
|
Utils::Icon::Tint).icon();
|
||||||
static const QIcon warningIcon = Utils::Icon({
|
static const QIcon warningIcon = Utils::Icon(
|
||||||
{QLatin1String(":/clangcodemodel/images/warning.png"), Utils::Theme::IconsWarningColor}
|
{{":/clangcodemodel/images/warning.png", Utils::Theme::IconsWarningColor}},
|
||||||
}, Utils::Icon::Tint).icon();
|
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))
|
if (isWarningOrNote(m_diagnostic.severity()))
|
||||||
TextMark::setIcon(warningIcon);
|
setIcon(valid ? warningIcon : invalidWarningIcon);
|
||||||
else
|
else
|
||||||
TextMark::setIcon(errorIcon);
|
setIcon(valid ? errorIcon : invalidErrorIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClangTextMark::addToolTipContent(QLayout *target) const
|
bool ClangTextMark::addToolTipContent(QLayout *target) const
|
||||||
|
@@ -43,8 +43,8 @@ public:
|
|||||||
const ClangBackEnd::DiagnosticContainer &diagnostic,
|
const ClangBackEnd::DiagnosticContainer &diagnostic,
|
||||||
const RemovedFromEditorHandler &removedHandler);
|
const RemovedFromEditorHandler &removedHandler);
|
||||||
|
|
||||||
|
void updateIcon(bool valid = true);
|
||||||
private:
|
private:
|
||||||
void setIcon(ClangBackEnd::DiagnosticSeverity severity);
|
|
||||||
bool addToolTipContent(QLayout *target) const override;
|
bool addToolTipContent(QLayout *target) const override;
|
||||||
void removedFromEditor() override;
|
void removedFromEditor() override;
|
||||||
|
|
||||||
|
@@ -257,6 +257,8 @@ void CppEditorDocument::scheduleProcessDocument()
|
|||||||
|
|
||||||
void CppEditorDocument::processDocument()
|
void CppEditorDocument::processDocument()
|
||||||
{
|
{
|
||||||
|
processor()->invalidateDiagnostics();
|
||||||
|
|
||||||
if (processor()->isParserRunning() || m_processorRevision != contentsRevision()) {
|
if (processor()->isParserRunning() || m_processorRevision != contentsRevision()) {
|
||||||
m_processorTimer.start();
|
m_processorTimer.start();
|
||||||
processor()->editorDocumentTimerRestarted();
|
processor()->editorDocumentTimerRestarted();
|
||||||
|
@@ -87,6 +87,10 @@ void BaseEditorDocumentProcessor::editorDocumentTimerRestarted()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseEditorDocumentProcessor::invalidateDiagnostics()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void BaseEditorDocumentProcessor::setParserConfig(
|
void BaseEditorDocumentProcessor::setParserConfig(
|
||||||
const BaseEditorDocumentParser::Configuration config)
|
const BaseEditorDocumentParser::Configuration config)
|
||||||
{
|
{
|
||||||
|
@@ -66,6 +66,7 @@ public:
|
|||||||
virtual TextEditor::QuickFixOperations
|
virtual TextEditor::QuickFixOperations
|
||||||
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface);
|
extraRefactoringOperations(const TextEditor::AssistInterface &assistInterface);
|
||||||
|
|
||||||
|
virtual void invalidateDiagnostics();
|
||||||
virtual bool hasDiagnosticsAt(uint line, uint column) const;
|
virtual bool hasDiagnosticsAt(uint line, uint column) const;
|
||||||
virtual void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *layout) const;
|
virtual void addDiagnosticToolTipToLayout(uint line, uint column, QLayout *layout) const;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user