From e1de989e16ee913dca41062d26313f675e1bdfcc Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar <nikolai.kosjar@qt.io> Date: Mon, 10 Jul 2017 09:53:34 +0200 Subject: [PATCH] Clang: Show inline diagnostics only for project files When navigating to headers that are not part of the project, avoid showing the inline diagnostics. In most cases, these files can't be changed. This helps also for the session-load case where files are opened/parsed when no project information is available yet. Change-Id: I7fce24af78b3b1efbf64dd27d8ca2a053e02d4ec Reviewed-by: David Schulz <david.schulz@qt.io> --- src/plugins/clangcodemodel/clangdiagnosticmanager.cpp | 7 +++++-- src/plugins/clangcodemodel/clangdiagnosticmanager.h | 4 +++- .../clangcodemodel/clangeditordocumentprocessor.cpp | 4 +++- src/plugins/clangcodemodel/clangeditordocumentprocessor.h | 1 + src/plugins/clangcodemodel/clangtextmark.cpp | 6 ++++-- src/plugins/clangcodemodel/clangtextmark.h | 3 ++- 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp index f5fe4d63681..c8da6e6c6a2 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp @@ -376,9 +376,11 @@ void ClangDiagnosticManager::generateEditorSelections() } void ClangDiagnosticManager::processNewDiagnostics( - const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics) + const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics, + bool showTextMarkAnnotations) { m_diagnosticsInvalidated = false; + m_showTextMarkAnnotations = showTextMarkAnnotations; filterDiagnostics(allDiagnostics); generateTextMarks(); @@ -401,7 +403,8 @@ void ClangDiagnosticManager::addClangTextMarks( m_clangTextMarks.erase(it, m_clangTextMarks.end()); delete mark; }; - auto textMark = new ClangTextMark(filePath(), diagnostic, onMarkRemoved); + auto textMark = new ClangTextMark(filePath(), diagnostic, onMarkRemoved, + m_showTextMarkAnnotations); m_clangTextMarks.push_back(textMark); m_textDocument->addMark(textMark); } diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.h b/src/plugins/clangcodemodel/clangdiagnosticmanager.h index e22cd933d53..16b1c16d2d9 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.h +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.h @@ -49,7 +49,8 @@ public: ClangDiagnosticManager(TextEditor::TextDocument *textDocument); ~ClangDiagnosticManager(); - void processNewDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics); + void processNewDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &allDiagnostics, + bool showTextMarkAnnotations); const QVector<ClangBackEnd::DiagnosticContainer> &diagnosticsWithFixIts() const; QList<QTextEdit::ExtraSelection> takeExtraSelections(); @@ -82,6 +83,7 @@ private: TextEditor::RefactorMarkers m_fixItAvailableMarkers; std::vector<ClangTextMark *> m_clangTextMarks; bool m_diagnosticsInvalidated = false; + bool m_showTextMarkAnnotations = false; }; } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 848de72ebc0..6b0f995ecea 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -180,7 +180,7 @@ void ClangEditorDocumentProcessor::updateCodeWarnings( uint documentRevision) { if (documentRevision == revision()) { - m_diagnosticManager.processNewDiagnostics(diagnostics); + m_diagnosticManager.processNewDiagnostics(diagnostics, m_isProjectFile); const auto codeWarnings = m_diagnosticManager.takeExtraSelections(); const auto fixitAvailableMarkers = m_diagnosticManager.takeFixItAvailableMarkers(); const auto creator = creatorForHeaderErrorDiagnosticWidget(firstHeaderErrorDiagnostic); @@ -368,6 +368,8 @@ void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor( registerTranslationUnitForEditor(projectPart.data()); m_projectPart = projectPart; + m_isProjectFile = m_parser->projectPartInfo().hints + & CppTools::ProjectPartInfo::IsFromProjectMatch; } } diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index da6872fa3db..d7c27a79ff2 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -114,6 +114,7 @@ private: IpcCommunicator &m_ipcCommunicator; QSharedPointer<ClangEditorDocumentParser> m_parser; CppTools::ProjectPart::Ptr m_projectPart; + bool m_isProjectFile = false; QFutureWatcher<void> m_parserWatcher; QTimer m_updateTranslationUnitTimer; unsigned m_parserRevision; diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index b8d69a722e8..a24e1fea1d6 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -64,7 +64,8 @@ Core::Id cartegoryForSeverity(ClangBackEnd::DiagnosticSeverity severity) ClangTextMark::ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic, - const RemovedFromEditorHandler &removedHandler) + const RemovedFromEditorHandler &removedHandler, + bool showLineAnnotations) : TextEditor::TextMark(fileName, int(diagnostic.location().line()), cartegoryForSeverity(diagnostic.severity())) @@ -79,7 +80,8 @@ ClangTextMark::ClangTextMark(const QString &fileName, setPriority(warning ? TextEditor::TextMark::NormalPriority : TextEditor::TextMark::HighPriority); updateIcon(); - setLineAnnotation(diagnostic.text().toString()); + if (showLineAnnotations) + setLineAnnotation(diagnostic.text().toString()); } void ClangTextMark::updateIcon(bool valid) diff --git a/src/plugins/clangcodemodel/clangtextmark.h b/src/plugins/clangcodemodel/clangtextmark.h index 0342fd1a62d..ae5478168a3 100644 --- a/src/plugins/clangcodemodel/clangtextmark.h +++ b/src/plugins/clangcodemodel/clangtextmark.h @@ -41,7 +41,8 @@ public: ClangTextMark(const QString &fileName, const ClangBackEnd::DiagnosticContainer &diagnostic, - const RemovedFromEditorHandler &removedHandler); + const RemovedFromEditorHandler &removedHandler, + bool showLineAnnotations); void updateIcon(bool valid = true); private: -- GitLab