diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 1c3c2ad457b..f4596dcb14e 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1315,10 +1315,10 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) setDocumentChangeUpdateThreshold(d->settings.documentUpdateThreshold); const auto textMarkCreator = [this](const Utils::FilePath &filePath, - const Diagnostic &diag) { + const Diagnostic &diag, bool isProjectFile) { if (d->isTesting) emit textMarkCreated(filePath); - return new ClangdTextMark(filePath, diag, this); + return new ClangdTextMark(filePath, diag, isProjectFile, this); }; const auto hideDiagsHandler = []{ ClangDiagnosticManager::clearTaskHubIssues(); }; setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler); diff --git a/src/plugins/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp index 16fda9accba..20bef44e3bd 100644 --- a/src/plugins/clangcodemodel/clangtextmark.cpp +++ b/src/plugins/clangcodemodel/clangtextmark.cpp @@ -385,6 +385,7 @@ ClangBackEnd::DiagnosticContainer convertDiagnostic(const ClangdDiagnostic &src, ClangdTextMark::ClangdTextMark(const FilePath &filePath, const Diagnostic &diagnostic, + bool isProjectFile, const Client *client) : TextEditor::TextMark(filePath, int(diagnostic.range().start().line() + 1), client->id()) , m_lspDiagnostic(diagnostic) @@ -399,7 +400,7 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath, setPriority(isError ? TextEditor::TextMark::HighPriority : TextEditor::TextMark::NormalPriority); setIcon(isError ? Icons::CODEMODEL_ERROR.icon() : Icons::CODEMODEL_WARNING.icon()); - if (client->project()) { + if (isProjectFile) { setLineAnnotation(diagnostic.message()); setColor(isError ? Theme::CodeModel_Error_TextMarkColor : Theme::CodeModel_Warning_TextMarkColor); diff --git a/src/plugins/clangcodemodel/clangtextmark.h b/src/plugins/clangcodemodel/clangtextmark.h index 15b97ab32f1..2c08e875900 100644 --- a/src/plugins/clangcodemodel/clangtextmark.h +++ b/src/plugins/clangcodemodel/clangtextmark.h @@ -72,6 +72,7 @@ class ClangdTextMark : public TextEditor::TextMark public: ClangdTextMark(const ::Utils::FilePath &filePath, const LanguageServerProtocol::Diagnostic &diagnostic, + bool isProjectFile, const LanguageClient::Client *client); private: diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index cdaadb7d4a8..381e0f9fc45 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -28,6 +28,7 @@ #include "client.h" #include +#include #include #include #include @@ -74,7 +75,7 @@ private: DiagnosticManager::DiagnosticManager(Client *client) : m_client(client) { - m_textMarkCreator = [this](const FilePath &filePath, const Diagnostic &diagnostic) { + m_textMarkCreator = [this](const FilePath &filePath, const Diagnostic &diagnostic, bool /*isProjectFile*/) { return createTextMark(filePath, diagnostic); }; } @@ -125,9 +126,11 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version) QList extraSelections; const VersionedDiagnostics &versionedDiagnostics = m_diagnostics.value(uri); if (versionedDiagnostics.version.value_or(version) == version) { + const bool isProjectFile = m_client->project() + && m_client->project()->isKnownFile(filePath); for (const Diagnostic &diagnostic : versionedDiagnostics.diagnostics) { extraSelections << toDiagnosticsSelections(diagnostic, doc->document()); - m_marks[filePath].append(m_textMarkCreator(filePath, diagnostic)); + m_marks[filePath].append(m_textMarkCreator(filePath, diagnostic, isProjectFile)); } } diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index a7e2e474852..c4bfabf71a3 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -43,7 +43,7 @@ namespace LanguageClient { class Client; using TextMarkCreator = std::function; + const LanguageServerProtocol::Diagnostic &, bool)>; using HideDiagnosticsHandler = std::function; class DiagnosticManager