forked from qt-creator/qt-creator
ClangCodeModel: Use the correct language type options for MSVC
This was broken by our compiler command line optimizations, resulting in "-x" rather than "/T" appearing for MSVC/clang-cl toolchains and causing clangd to assume C instead of C++ for some files. Change-Id: Ib98db88ac90e4e45a7016a7edcb80a279df372aa Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -845,9 +845,11 @@ static void addToCompilationDb(QJsonObject &cdb,
|
|||||||
CppEditor::UsePrecompiledHeaders usePch,
|
CppEditor::UsePrecompiledHeaders usePch,
|
||||||
const QJsonArray &projectPartOptions,
|
const QJsonArray &projectPartOptions,
|
||||||
const Utils::FilePath &workingDir,
|
const Utils::FilePath &workingDir,
|
||||||
const CppEditor::ProjectFile &sourceFile)
|
const CppEditor::ProjectFile &sourceFile,
|
||||||
|
bool clStyle)
|
||||||
{
|
{
|
||||||
QJsonArray args = clangOptionsForFile(sourceFile, projectPart, projectPartOptions, usePch);
|
QJsonArray args = clangOptionsForFile(sourceFile, projectPart, projectPartOptions, usePch,
|
||||||
|
clStyle);
|
||||||
|
|
||||||
// TODO: clangd seems to apply some heuristics depending on what we put here.
|
// TODO: clangd seems to apply some heuristics depending on what we put here.
|
||||||
// Should we make use of them or keep using our own?
|
// Should we make use of them or keep using our own?
|
||||||
@@ -889,7 +891,8 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
|
|||||||
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
||||||
optionsBuilder, globalClangOptions());
|
optionsBuilder, globalClangOptions());
|
||||||
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(),
|
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(),
|
||||||
projectPartOptions, usePch);
|
projectPartOptions, usePch,
|
||||||
|
optionsBuilder.isClStyle());
|
||||||
initOptions.insert("fallbackFlags", clangOptions);
|
initOptions.insert("fallbackFlags", clangOptions);
|
||||||
setInitializationOptions(initOptions);
|
setInitializationOptions(initOptions);
|
||||||
}
|
}
|
||||||
@@ -1328,7 +1331,7 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
|
|||||||
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
||||||
optionsBuilder, globalClangOptions());
|
optionsBuilder, globalClangOptions());
|
||||||
addToCompilationDb(cdbChanges, *projectPart, CppEditor::getPchUsage(), projectPartOptions,
|
addToCompilationDb(cdbChanges, *projectPart, CppEditor::getPchUsage(), projectPartOptions,
|
||||||
filePath.parentDir(), file);
|
filePath.parentDir(), file, optionsBuilder.isClStyle());
|
||||||
QJsonObject settings;
|
QJsonObject settings;
|
||||||
addCompilationDb(settings, cdbChanges);
|
addCompilationDb(settings, cdbChanges);
|
||||||
DidChangeConfigurationParams configChangeParams;
|
DidChangeConfigurationParams configChangeParams;
|
||||||
|
@@ -130,7 +130,8 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
|||||||
const ProjectFile &projFile,
|
const ProjectFile &projFile,
|
||||||
CompilationDbPurpose purpose,
|
CompilationDbPurpose purpose,
|
||||||
const QJsonArray &projectPartOptions,
|
const QJsonArray &projectPartOptions,
|
||||||
UsePrecompiledHeaders usePch)
|
UsePrecompiledHeaders usePch,
|
||||||
|
bool clStyle)
|
||||||
{
|
{
|
||||||
QJsonObject fileObject;
|
QJsonObject fileObject;
|
||||||
fileObject["file"] = projFile.path;
|
fileObject["file"] = projFile.path;
|
||||||
@@ -155,7 +156,7 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
|||||||
args.append(langOptionPart);
|
args.append(langOptionPart);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
args = clangOptionsForFile(projFile, projectPart, projectPartOptions, usePch);
|
args = clangOptionsForFile(projFile, projectPart, projectPartOptions, usePch, clStyle);
|
||||||
args.prepend("clang"); // TODO: clang-cl for MSVC targets? Does it matter at all what we put here?
|
args.prepend("clang"); // TODO: clang-cl for MSVC targets? Does it matter at all what we put here?
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +201,8 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
|||||||
}
|
}
|
||||||
for (const ProjectFile &projFile : projectPart->files) {
|
for (const ProjectFile &projFile : projectPart->files) {
|
||||||
const QJsonObject json = createFileObject(baseDir, args, *projectPart, projFile,
|
const QJsonObject json = createFileObject(baseDir, args, *projectPart, projFile,
|
||||||
purpose, ppOptions, usePch);
|
purpose, ppOptions, usePch,
|
||||||
|
optionsBuilder.isClStyle());
|
||||||
if (compileCommandsFile.size() > 1)
|
if (compileCommandsFile.size() > 1)
|
||||||
compileCommandsFile.write(",");
|
compileCommandsFile.write(",");
|
||||||
compileCommandsFile.write('\n' + QJsonDocument(json).toJson().trimmed());
|
compileCommandsFile.write('\n' + QJsonDocument(json).toJson().trimmed());
|
||||||
@@ -274,9 +276,11 @@ QString DiagnosticTextInfo::clazyCheckName(const QString &option)
|
|||||||
|
|
||||||
|
|
||||||
QJsonArray clangOptionsForFile(const ProjectFile &file, const ProjectPart &projectPart,
|
QJsonArray clangOptionsForFile(const ProjectFile &file, const ProjectPart &projectPart,
|
||||||
const QJsonArray &generalOptions, UsePrecompiledHeaders usePch)
|
const QJsonArray &generalOptions, UsePrecompiledHeaders usePch,
|
||||||
|
bool clStyle)
|
||||||
{
|
{
|
||||||
CompilerOptionsBuilder optionsBuilder(projectPart);
|
CompilerOptionsBuilder optionsBuilder(projectPart);
|
||||||
|
optionsBuilder.setClStyle(clStyle);
|
||||||
ProjectFile::Kind fileKind = file.kind;
|
ProjectFile::Kind fileKind = file.kind;
|
||||||
if (fileKind == ProjectFile::AmbiguousHeader) {
|
if (fileKind == ProjectFile::AmbiguousHeader) {
|
||||||
fileKind = projectPart.languageVersion <= LanguageVersion::LatestC
|
fileKind = projectPart.languageVersion <= LanguageVersion::LatestC
|
||||||
|
@@ -66,7 +66,7 @@ QJsonArray fullProjectPartOptions(const QJsonArray &projectPartOptions,
|
|||||||
QJsonArray clangOptionsForFile(const CppEditor::ProjectFile &file,
|
QJsonArray clangOptionsForFile(const CppEditor::ProjectFile &file,
|
||||||
const CppEditor::ProjectPart &projectPart,
|
const CppEditor::ProjectPart &projectPart,
|
||||||
const QJsonArray &generalOptions,
|
const QJsonArray &generalOptions,
|
||||||
CppEditor::UsePrecompiledHeaders usePch);
|
CppEditor::UsePrecompiledHeaders usePch, bool clStyle);
|
||||||
|
|
||||||
CppEditor::ProjectPart::ConstPtr projectPartForFile(const QString &filePath);
|
CppEditor::ProjectPart::ConstPtr projectPartForFile(const QString &filePath);
|
||||||
|
|
||||||
|
@@ -95,6 +95,7 @@ public:
|
|||||||
|
|
||||||
void evaluateCompilerFlags();
|
void evaluateCompilerFlags();
|
||||||
bool isClStyle() const;
|
bool isClStyle() const;
|
||||||
|
void setClStyle(bool clStyle) { m_clStyle = clStyle; }
|
||||||
|
|
||||||
const ProjectPart &projectPart() const { return m_projectPart; }
|
const ProjectPart &projectPart() const { return m_projectPart; }
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user