Clang: delay text mark update

Reducing display of unwanted line annotations while typing in small
files.

Change-Id: I51864bbc3056ad792d5ee4b96f63e954dfba79dd
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
David Schulz
2017-07-12 09:34:30 +02:00
parent 892026a619
commit 635750aa11
2 changed files with 17 additions and 1 deletions

View File

@@ -278,6 +278,8 @@ namespace Internal {
ClangDiagnosticManager::ClangDiagnosticManager(TextEditor::TextDocument *textDocument)
: m_textDocument(textDocument)
{
m_textMarkDelay.setInterval(1500);
m_textMarkDelay.setSingleShot(true);
}
ClangDiagnosticManager::~ClangDiagnosticManager()
@@ -295,6 +297,7 @@ void ClangDiagnosticManager::cleanMarks()
}
void ClangDiagnosticManager::generateTextMarks()
{
QObject::disconnect(&m_textMarkDelay, &QTimer::timeout, 0, 0);
cleanMarks();
m_clangTextMarks.reserve(m_warningDiagnostics.size() + m_errorDiagnostics.size());
addClangTextMarks(m_warningDiagnostics);
@@ -350,6 +353,7 @@ ClangDiagnosticManager::diagnosticsAt(uint line, uint column) const
void ClangDiagnosticManager::invalidateDiagnostics()
{
m_textMarkDelay.start();
if (m_diagnosticsInvalidated)
return;
@@ -383,9 +387,18 @@ void ClangDiagnosticManager::processNewDiagnostics(
m_showTextMarkAnnotations = showTextMarkAnnotations;
filterDiagnostics(allDiagnostics);
generateTextMarks();
generateEditorSelections();
generateFixItAvailableMarkers();
if (m_firstDiagnostics) {
m_firstDiagnostics = false;
generateTextMarks();
} else if (!m_textMarkDelay.isActive()) {
generateTextMarks();
} else {
QObject::connect(&m_textMarkDelay, &QTimer::timeout, [this]() {
generateTextMarks();
});
}
}
const QVector<ClangBackEnd::DiagnosticContainer> &