diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index f0637feb753..894f22aaa92 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1321,7 +1321,12 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) return new ClangdTextMark(filePath, diag, isProjectFile, this); }; const auto hideDiagsHandler = []{ ClangDiagnosticManager::clearTaskHubIssues(); }; - setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler); + static const auto diagsFilter = [](const Diagnostic &diag) { + const Diagnostic::Code code = diag.code().value_or(Diagnostic::Code()); + const QString * const codeString = Utils::get_if(&code); + return !codeString || *codeString != "drv_unknown_argument"; + }; + setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler, diagsFilter); setSymbolStringifier(displayNameFromDocumentSymbol); setSemanticTokensHandler([this](TextDocument *doc, const QList &tokens, int version, bool force) { diff --git a/src/plugins/clangcodemodel/test/data/completion/completion.pro b/src/plugins/clangcodemodel/test/data/completion/completion.pro index da641f22378..832b9aac07f 100644 --- a/src/plugins/clangcodemodel/test/data/completion/completion.pro +++ b/src/plugins/clangcodemodel/test/data/completion/completion.pro @@ -27,5 +27,7 @@ SOURCES = \ privateFuncDefCompletion.cpp \ signalCompletion.cpp +QMAKE_CXXFLAGS += -ffoo + HEADERS = mainwindow.h FORMS = mainwindow.ui diff --git a/src/plugins/clangcodemodel/test/data/find-usages/find-usages.pro b/src/plugins/clangcodemodel/test/data/find-usages/find-usages.pro index c4474855308..cf511fee40a 100644 --- a/src/plugins/clangcodemodel/test/data/find-usages/find-usages.pro +++ b/src/plugins/clangcodemodel/test/data/find-usages/find-usages.pro @@ -2,3 +2,4 @@ TEMPLATE = app QT = core HEADERS = defs.h SOURCES = main.cpp +QMAKE_CXXFLAGS += -ffoo diff --git a/src/plugins/clangcodemodel/test/data/follow-symbol/follow-symbol.pro b/src/plugins/clangcodemodel/test/data/follow-symbol/follow-symbol.pro index 7d2c3147a3e..8b0d6d1879b 100644 --- a/src/plugins/clangcodemodel/test/data/follow-symbol/follow-symbol.pro +++ b/src/plugins/clangcodemodel/test/data/follow-symbol/follow-symbol.pro @@ -2,3 +2,4 @@ TEMPLATE = app CONFIG -= qt HEADERS = cursor.h header.h SOURCES = cursor.cpp main.cpp +QMAKE_CXXFLAGS += -ffoo diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.pro b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.pro index 7dd57583ea9..32196b9724f 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.pro +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.pro @@ -1,3 +1,4 @@ TEMPLATE = app CONFIG -= qt SOURCES = highlighting.cpp +QMAKE_CXXFLAGS += -ffoo diff --git a/src/plugins/clangcodemodel/test/data/local-references/local-references.pro b/src/plugins/clangcodemodel/test/data/local-references/local-references.pro index c3b335aad8d..f47c1c68154 100644 --- a/src/plugins/clangcodemodel/test/data/local-references/local-references.pro +++ b/src/plugins/clangcodemodel/test/data/local-references/local-references.pro @@ -1,5 +1,4 @@ TEMPLATE = app - CONFIG -= qt - SOURCES = references.cpp +QMAKE_CXXFLAGS += -ffoo diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 79a6782e060..541ba0d3e21 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1054,9 +1054,10 @@ bool Client::hasDiagnostic(const LanguageServerProtocol::DocumentUri &uri, } void Client::setDiagnosticsHandlers(const TextMarkCreator &textMarkCreator, - const HideDiagnosticsHandler &hideHandler) + const HideDiagnosticsHandler &hideHandler, + const DiagnosticsFilter &filter) { - m_diagnosticManager.setDiagnosticsHandlers(textMarkCreator, hideHandler); + m_diagnosticManager.setDiagnosticsHandlers(textMarkCreator, hideHandler, filter); } void Client::setSemanticTokensHandler(const SemanticTokensHandler &handler) diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index d95d5693609..f1e9c581f48 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -186,7 +186,7 @@ public: bool hasDiagnostic(const LanguageServerProtocol::DocumentUri &uri, const LanguageServerProtocol::Diagnostic &diag) const; void setDiagnosticsHandlers(const TextMarkCreator &textMarkCreator, - const HideDiagnosticsHandler &hideHandler); + const HideDiagnosticsHandler &hideHandler, const DiagnosticsFilter &filter); void setSemanticTokensHandler(const SemanticTokensHandler &handler); void setSymbolStringifier(const LanguageServerProtocol::SymbolStringifier &stringifier); LanguageServerProtocol::SymbolStringifier symbolStringifier() const; diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index 2b1d66c477d..a1b729ce9bf 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -90,7 +90,9 @@ void DiagnosticManager::setDiagnostics(const LanguageServerProtocol::DocumentUri const Utils::optional &version) { hideDiagnostics(uri.toFilePath()); - m_diagnostics[uri] = {version, diagnostics}; + const QList filteredDiags = m_filter + ? Utils::filtered(diagnostics, m_filter) : diagnostics; + m_diagnostics[uri] = {version, filteredDiags}; } void DiagnosticManager::hideDiagnostics(const Utils::FilePath &filePath) @@ -201,10 +203,12 @@ bool DiagnosticManager::hasDiagnostic(const LanguageServerProtocol::DocumentUri } void DiagnosticManager::setDiagnosticsHandlers(const TextMarkCreator &textMarkCreator, - const HideDiagnosticsHandler &removalHandler) + const HideDiagnosticsHandler &removalHandler, + const DiagnosticsFilter &filter) { m_textMarkCreator = textMarkCreator; m_hideHandler = removalHandler; + m_filter = filter; } } // namespace LanguageClient diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index c4bfabf71a3..f201aaf50c2 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -45,6 +45,7 @@ class Client; using TextMarkCreator = std::function; using HideDiagnosticsHandler = std::function; +using DiagnosticsFilter = std::function; class DiagnosticManager { @@ -70,7 +71,8 @@ public: const LanguageServerProtocol::Diagnostic &diag) const; void setDiagnosticsHandlers(const TextMarkCreator &shownHandler, - const HideDiagnosticsHandler &removalHandler); + const HideDiagnosticsHandler &removalHandler, + const DiagnosticsFilter &filter); private: TextEditor::TextMark *createTextMark(const Utils::FilePath &filePath, @@ -83,6 +85,7 @@ private: QMap> m_marks; TextMarkCreator m_textMarkCreator; HideDiagnosticsHandler m_hideHandler; + DiagnosticsFilter m_filter; Client *m_client; };