From 25c7390d0a6600a0ca31593fc3a78cd82b5800ef Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Sep 2023 14:14:45 +0200 Subject: [PATCH] ClangCodeModel: Start fallback clangd on demand E.g. when a non-project source file is opened. Fixes: QTCREATORBUG-29576 Change-Id: Ia99346a7a1016c4c7dcdb41ad6c8dbbc85ed95ff Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: David Schulz Reviewed-by: Eike Ziller --- .../clangcodemodel/clangmodelmanagersupport.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index e1bd9114717..b201d5a364c 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -231,10 +231,10 @@ ClangModelManagerSupport::ClangModelManagerSupport() connect(modelManager, &CppModelManager::fallbackProjectPartUpdated, this, [this] { if (sessionModeEnabled()) return; - if (ClangdClient * const fallbackClient = clientForProject(nullptr)) { + if (ClangdClient * const fallbackClient = clientForProject(nullptr)) LanguageClientManager::shutdownClient(fallbackClient); + if (ClangdSettings::instance().useClangd()) claimNonProjectSources(new ClangdClient(nullptr, {})); - } }); auto projectManager = ProjectManager::instance(); @@ -251,9 +251,6 @@ ClangModelManagerSupport::ClangModelManagerSupport() connect(&ClangdSettings::instance(), &ClangdSettings::changed, this, &ClangModelManagerSupport::onClangdSettingsChanged); - if (ClangdSettings::instance().useClangd()) - new ClangdClient(nullptr, {}); - new ClangdQuickFixFactory(); // memory managed by CppEditor::g_cppQuickFixFactories } @@ -777,8 +774,13 @@ void ClangModelManagerSupport::onEditorOpened(IEditor *editor) project = nullptr; else if (!project && ProjectFile::isHeader(document->filePath())) project = fallbackProject(); - if (ClangdClient * const client = clientForProject(project)) - LanguageClientManager::openDocumentWithClient(textDocument, client); + ClangdClient *client = clientForProject(project); + if (!client) { + if (project) + return; + client = new ClangdClient(nullptr, {}); + } + LanguageClientManager::openDocumentWithClient(textDocument, client); } }