diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp index 3c28e8400bb..a60023a9d72 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp @@ -86,7 +86,8 @@ void ClangCodeModelPlugin::generateCompilationDB() = QtConcurrent::run(&Internal::generateCompilationDB, projectInfo, projectInfo->buildRoot(), CompilationDbPurpose::Project, warningsConfig, - optionsForProject(target->project(), warningsConfig)); + optionsForProject(target->project(), warningsConfig), + FilePath()); Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db"); m_generatorWatcher.setFuture(task); } diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 283865e80ed..8581c24e631 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1492,10 +1492,12 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) setQuickFixAssistProvider(new ClangdQuickFixProvider(this)); if (!project) { QJsonObject initOptions; + const Utils::FilePath includeDir + = CppEditor::ClangdSettings(d->settings).clangdIncludePath(); const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(nullptr); CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder( *CppEditor::CppModelManager::instance()->fallbackProjectPart(), - warningsConfig); + warningsConfig, includeDir); const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage(); const QJsonArray projectPartOptions = fullProjectPartOptions( optionsBuilder, optionsForProject(nullptr, warningsConfig)); @@ -1918,9 +1920,10 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath, if (!projectPart) return; QJsonObject cdbChanges; + const Utils::FilePath includeDir = CppEditor::ClangdSettings(d->settings).clangdIncludePath(); const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project()); - CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart, - warningsConfig); + CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder( + *projectPart, warningsConfig, includeDir); const CppEditor::ProjectFile file(filePath.toString(), CppEditor::ProjectFile::classify(filePath.toString())); const QJsonArray projectPartOptions = fullProjectPartOptions( diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 5c3d7eff8cd..0d7780e9f3e 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -310,7 +310,8 @@ void ClangModelManagerSupport::connectToWidgetsMarkContextMenuRequested(QWidget void ClangModelManagerSupport::updateLanguageClient( ProjectExplorer::Project *project, const CppEditor::ProjectInfo::ConstPtr &projectInfo) { - if (!CppEditor::ClangdProjectSettings(project).settings().useClangd) + const ClangdSettings::Data clangdSettingsData = ClangdProjectSettings(project).settings(); + if (!clangdSettingsData.useClangd) return; const auto getJsonDbDir = [project] { if (const ProjectExplorer::Target * const target = project->activeTarget()) { @@ -419,10 +420,12 @@ void ClangModelManagerSupport::updateLanguageClient( }); }); + const Utils::FilePath includeDir = ClangdSettings(clangdSettingsData).clangdIncludePath(); const ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project); auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, jsonDbDir, CompilationDbPurpose::CodeModel, - warningsConfig, optionsForProject(project, warningsConfig)); + warningsConfig, optionsForProject(project, warningsConfig), + includeDir); generatorWatcher->setFuture(future); m_generatorSynchronizer.addFuture(future); } diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index ebd38483e70..664442cced8 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -172,7 +172,8 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo:: const Utils::FilePath &baseDir, CompilationDbPurpose purpose, const ClangDiagnosticConfig &warningsConfig, - const QStringList &projectOptions) + const QStringList &projectOptions, + const FilePath &clangIncludeDir) { QTC_ASSERT(!baseDir.isEmpty(), return GenerateCompilationDbResult(QString(), QCoreApplication::translate("ClangUtils", "Could not retrieve build directory."))); @@ -192,8 +193,8 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo:: const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions); for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) { QStringList args; - const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart, - warningsConfig); + const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder( + *projectPart, warningsConfig, clangIncludeDir); QJsonArray ppOptions; if (purpose == CompilationDbPurpose::Project) { args = projectPartArguments(*projectPart); @@ -370,13 +371,12 @@ QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface } CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart, - const ClangDiagnosticConfig &warningsConfig) + const ClangDiagnosticConfig &warningsConfig, + const Utils::FilePath &clangIncludeDir) { const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings() ? UseBuildSystemWarnings::Yes : UseBuildSystemWarnings::No; - const FilePath clangIncludeDir = Core::ICore::clangIncludeDirectory( - QString(CLANG_VERSION), FilePath(CLANG_INCLUDE_DIR)); CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, useBuildSystemWarnings, clangIncludeDir); diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h index 675a8d813dc..71fa0919712 100644 --- a/src/plugins/clangcodemodel/clangutils.h +++ b/src/plugins/clangcodemodel/clangutils.h @@ -57,7 +57,8 @@ const QStringList optionsForProject(ProjectExplorer::Project *project, CppEditor::CompilerOptionsBuilder clangOptionsBuilder( const CppEditor::ProjectPart &projectPart, - const CppEditor::ClangDiagnosticConfig &warningsConfig); + const CppEditor::ClangDiagnosticConfig &warningsConfig, + const Utils::FilePath &clangIncludeDir); QJsonArray projectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder); QJsonArray fullProjectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder, const QStringList &projectOptions); @@ -89,7 +90,8 @@ public: enum class CompilationDbPurpose { Project, CodeModel }; GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::ConstPtr projectInfo, const Utils::FilePath &baseDir, CompilationDbPurpose purpose, - const CppEditor::ClangDiagnosticConfig &warningsConfig, const QStringList &projectOptions); + const CppEditor::ClangDiagnosticConfig &warningsConfig, const QStringList &projectOptions, + const Utils::FilePath &clangIncludeDir); class DiagnosticTextInfo {