CppEditor: Introduce per-project code model settings

Change-Id: I325cc39e60d4b1f0fba1651502d772bfb9c6a91c
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2024-02-22 16:26:13 +01:00
parent 812326eadc
commit faa595e38b
24 changed files with 430 additions and 69 deletions

View File

@@ -419,7 +419,7 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, c
*CppEditor::CppModelManager::fallbackProjectPart(),
warningsConfigForProject(nullptr), includeDir, {});
const CppEditor::UsePrecompiledHeaders usePch
= CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders();
= CppEditor::CppCodeModelSettings::usePrecompiledHeaders(nullptr);
const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions());
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(),
@@ -600,7 +600,7 @@ void ClangdClient::findUsages(const CppEditor::CursorInEditor &cursor,
}
}
const bool categorize = CppEditor::CppCodeModelSettings::instance().categorizeFindReferences();
const bool categorize = CppEditor::CppCodeModelSettings::categorizeFindReferences();
// If it's a "normal" symbol, go right ahead.
if (searchTerm != "operator" && Utils::allOf(searchTerm, [](const QChar &c) {
@@ -920,9 +920,11 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
CppEditor::ProjectFile::classify(filePath.toString()));
const QJsonArray projectPartOptions = fullProjectPartOptions(
optionsBuilder, globalClangOptions());
const auto cppSettings = CppEditor::CppCodeModelSettings::settingsForProject(
projectPart->topLevelProject);
addToCompilationDb(cdbChanges,
*projectPart,
CppEditor::CppCodeModelSettings::instance().usePrecompiledHeaders(),
cppSettings.usePrecompiledHeaders(),
projectPartOptions,
filePath.parentDir(),
file,

View File

@@ -166,7 +166,6 @@ GenerateCompilationDbResult generateCompilationDB(QList<ProjectInfo::ConstPtr> p
}
compileCommandsFile.write("[");
const UsePrecompiledHeaders usePch = CppCodeModelSettings::instance().usePrecompiledHeaders();
const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions);
for (const ProjectInfo::ConstPtr &projectInfo : std::as_const(projectInfoList)) {
QTC_ASSERT(projectInfo, continue);
@@ -183,9 +182,15 @@ GenerateCompilationDbResult generateCompilationDB(QList<ProjectInfo::ConstPtr> p
jsonProjectOptions);
}
for (const ProjectFile &projFile : projectPart->files) {
const QJsonObject json = createFileObject(baseDir, args, *projectPart, projFile,
purpose, ppOptions, usePch,
optionsBuilder.isClStyle());
const QJsonObject json
= createFileObject(baseDir,
args,
*projectPart,
projFile,
purpose,
ppOptions,
projectInfo->settings().usePrecompiledHeaders(),
optionsBuilder.isClStyle());
if (compileCommandsFile.size() > 1)
compileCommandsFile.write(",");
compileCommandsFile.write(QJsonDocument(json).toJson(QJsonDocument::Compact));

View File

@@ -249,7 +249,7 @@ private:
void ClangdTestFindReferences::initTestCase()
{
ClangdTest::initTestCase();
CppEditor::CppCodeModelSettings::instance().setCategorizeFindReferences(true);
CppEditor::CppCodeModelSettings::setCategorizeFindReferences(true);
connect(client(), &ClangdClient::foundReferences, this,
[this](const SearchResultItems &results) {
if (results.isEmpty())