forked from qt-creator/qt-creator
ClangCodeModel: Do not re-classify source files for compilation db
This information is already present in the project part. Change-Id: I797b6f573e7fb434b323efa4219dab54103aecaa Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -1456,19 +1456,20 @@ static void addToCompilationDb(QJsonObject &cdb,
|
||||
const CppEditor::CompilerOptionsBuilder &optionsBuilder,
|
||||
const QStringList &projectOptions,
|
||||
const Utils::FilePath &workingDir,
|
||||
const Utils::FilePath &sourceFile)
|
||||
const CppEditor::ProjectFile &sourceFile)
|
||||
{
|
||||
QStringList args = clangOptionsForFile(optionsBuilder, sourceFile.toString(), projectOptions);
|
||||
QStringList args = clangOptionsForFile(optionsBuilder, sourceFile, projectOptions);
|
||||
|
||||
// TODO: clangd seems to apply some heuristics depending on what we put here.
|
||||
// Should we make use of them or keep using our own?
|
||||
args.prepend("clang");
|
||||
|
||||
args.append(sourceFile.toUserOutput());
|
||||
const QString fileString = Utils::FilePath::fromString(sourceFile.path).toUserOutput();
|
||||
args.append(fileString);
|
||||
QJsonObject value;
|
||||
value.insert("workingDirectory", workingDir.toString());
|
||||
value.insert("compilationCommand", QJsonArray::fromStringList(args));
|
||||
cdb.insert(sourceFile.toUserOutput(), value);
|
||||
cdb.insert(fileString, value);
|
||||
}
|
||||
|
||||
static void addCompilationDb(QJsonObject &parentObject, const QJsonObject &cdb)
|
||||
@@ -1916,8 +1917,10 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
|
||||
const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project());
|
||||
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart,
|
||||
warningsConfig);
|
||||
const CppEditor::ProjectFile file(filePath.toString(),
|
||||
CppEditor::ProjectFile::classify(filePath.toString()));
|
||||
addToCompilationDb(cdbChanges, optionsBuilder, optionsForProject(project(), warningsConfig),
|
||||
filePath.parentDir(), filePath);
|
||||
filePath.parentDir(), file);
|
||||
QJsonObject settings;
|
||||
addCompilationDb(settings, cdbChanges);
|
||||
DidChangeConfigurationParams configChangeParams;
|
||||
|
||||
@@ -212,7 +212,7 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
||||
args.append(langOptionPart);
|
||||
}
|
||||
} else {
|
||||
args = QJsonArray::fromStringList(clangOptionsForFile(optionsBuilder, projFile.path,
|
||||
args = QJsonArray::fromStringList(clangOptionsForFile(optionsBuilder, projFile,
|
||||
projectOptions));
|
||||
args.prepend("clang"); // TODO: clang-cl for MSVC targets? Does it matter at all what we put here?
|
||||
}
|
||||
@@ -334,20 +334,19 @@ static ClangProjectSettings &getProjectSettings(ProjectExplorer::Project *projec
|
||||
} // namespace
|
||||
|
||||
QStringList clangOptionsForFile(CompilerOptionsBuilder optionsBuilder,
|
||||
const QString &filePath, const QStringList &projectOptions)
|
||||
const ProjectFile &file, const QStringList &projectOptions)
|
||||
{
|
||||
ProjectFile::Kind fileKind = filePath.isEmpty()
|
||||
? ProjectFile::Unclassified : ProjectFile::classify(filePath);
|
||||
ProjectFile::Kind fileKind = file.kind;
|
||||
if (fileKind == ProjectFile::AmbiguousHeader) {
|
||||
fileKind = optionsBuilder.projectPart().languageVersion <= LanguageVersion::LatestC
|
||||
? ProjectFile::CHeader : ProjectFile::CXXHeader;
|
||||
}
|
||||
auto pchUsage = getPchUsage();
|
||||
if (pchUsage == UsePrecompiledHeaders::Yes
|
||||
&& optionsBuilder.projectPart().precompiledHeaders.contains(filePath)) {
|
||||
&& optionsBuilder.projectPart().precompiledHeaders.contains(file.path)) {
|
||||
pchUsage = UsePrecompiledHeaders::No;
|
||||
}
|
||||
optionsBuilder.updateFileLanguage(fileKind);
|
||||
optionsBuilder.updateFileLanguage(file.kind);
|
||||
optionsBuilder.addPrecompiledHeaderOptions(pchUsage);
|
||||
return projectOptions + optionsBuilder.options();
|
||||
}
|
||||
|
||||
@@ -64,7 +64,8 @@ CppEditor::CompilerOptionsBuilder clangOptionsBuilder(
|
||||
const CppEditor::ProjectPart &projectPart,
|
||||
const CppEditor::ClangDiagnosticConfig &warningsConfig);
|
||||
QStringList clangOptionsForFile(CppEditor::CompilerOptionsBuilder optionsBuilder,
|
||||
const QString &filePath, const QStringList &projectOptions);
|
||||
const CppEditor::ProjectFile &file,
|
||||
const QStringList &projectOptions);
|
||||
|
||||
CppEditor::ProjectPart::ConstPtr projectPartForFile(const QString &filePath);
|
||||
CppEditor::ProjectPart::ConstPtr projectPartForFileBasedOnProcessor(const QString &filePath);
|
||||
|
||||
Reference in New Issue
Block a user