From dc87947cb3bab35962561db19359931934d73e1e Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 11 Aug 2021 11:20:42 +0200 Subject: [PATCH] ClangD: skip automatic code action request .. after receiving diagnostics since the code actions are already inlined into the diagnostics. Change-Id: I11ed1270344ff5119dd111503d173eef2f340c1d Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 1 + src/plugins/languageclient/client.cpp | 3 ++- src/plugins/languageclient/client.h | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index aa66ade3cb8..60decc87fdf 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -755,6 +755,7 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) caps.clearExperimental(); setClientCapabilities(caps); setLocatorsEnabled(false); + setAutoRequestCodeActions(false); // clangd sends code actions inside diagnostics setProgressTitleForToken(indexingToken(), tr("Parsing C/C++ Files (clangd)")); setCurrentProject(project); diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index cc0454b3675..4d0abf56708 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1317,7 +1317,8 @@ void Client::handleDiagnostics(const PublishDiagnosticsParams ¶ms) m_diagnosticManager.setDiagnostics(uri, diagnostics, params.version()); if (LanguageClientManager::clientForUri(uri) == this) { m_diagnosticManager.showDiagnostics(uri, m_documentVersions.value(uri.toFilePath())); - requestCodeActions(uri, diagnostics); + if (m_autoRequestCodeActions) + requestCodeActions(uri, diagnostics); } } diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 567fe7c1e71..cd0c01b986d 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -128,6 +128,7 @@ public: void setLocatorsEnabled(bool enabled) { m_locatorsEnabled = enabled; } bool locatorsEnabled() const { return m_locatorsEnabled; } + void setAutoRequestCodeActions(bool enabled) { m_autoRequestCodeActions = enabled; } // document synchronization void setSupportedLanguage(const LanguageFilter &filter); @@ -281,6 +282,7 @@ private: QString m_serverVersion; LanguageServerProtocol::SymbolStringifier m_symbolStringifier; bool m_locatorsEnabled = true; + bool m_autoRequestCodeActions = true; }; } // namespace LanguageClient