ClangCodeModel: Clear existing libclang diagnostics

... when clangd takes over a document.
This fixes the problem that temporary diagnostics persisted after opening
a session.

Change-Id: Ic781f83747cabb4d15c2c1f8181e36f4343e0394
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-07-08 14:23:32 +02:00
parent fee0a5a74a
commit 1f4826a0c4
4 changed files with 12 additions and 1 deletions

View File

@@ -65,11 +65,11 @@ public:
static void clearTaskHubIssues();
void generateTaskHubIssues();
void cleanMarks();
static void addTask(const ClangBackEnd::DiagnosticContainer &diagnostic, bool isChild = false);
private:
void cleanMarks();
QString filePath() const;
void filterDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics);
void generateEditorSelections();

View File

@@ -251,6 +251,14 @@ void ClangEditorDocumentProcessor::generateTaskHubIssues()
m_diagnosticManager.generateTaskHubIssues();
}
void ClangEditorDocumentProcessor::clearTextMarks(const Utils::FilePath &filePath)
{
if (ClangEditorDocumentProcessor * const proc = get(filePath.toString())) {
proc->m_diagnosticManager.cleanMarks();
emit proc->codeWarningsUpdated(proc->revision(), {}, {}, {});
}
}
void ClangEditorDocumentProcessor::updateHighlighting(
const QVector<ClangBackEnd::TokenInfoContainer> &tokenInfos,
const QVector<ClangBackEnd::SourceRangeContainer> &skippedPreprocessorRanges,

View File

@@ -108,6 +108,8 @@ public:
static void clearTaskHubIssues();
void generateTaskHubIssues();
static void clearTextMarks(const Utils::FilePath &filePath);
public:
static ClangEditorDocumentProcessor *get(const QString &filePath);

View File

@@ -316,6 +316,7 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
if (!project->isKnownFile(entry->fileName()))
continue;
client->openDocument(textDocument);
ClangEditorDocumentProcessor::clearTextMarks(textDocument->filePath());
hasDocuments = true;
}