forked from qt-creator/qt-creator
ClangCodeModel: Use clangd's include path
... rather than the one from the LLVM that Qt Creator was compiled against. Task-number: QTCREATORBUG-27120 Change-Id: I4f211345ed547cd13f0b0774b99bc0f199a9cd44 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -86,7 +86,8 @@ void ClangCodeModelPlugin::generateCompilationDB()
|
|||||||
= QtConcurrent::run(&Internal::generateCompilationDB, projectInfo,
|
= QtConcurrent::run(&Internal::generateCompilationDB, projectInfo,
|
||||||
projectInfo->buildRoot(), CompilationDbPurpose::Project,
|
projectInfo->buildRoot(), CompilationDbPurpose::Project,
|
||||||
warningsConfig,
|
warningsConfig,
|
||||||
optionsForProject(target->project(), warningsConfig));
|
optionsForProject(target->project(), warningsConfig),
|
||||||
|
FilePath());
|
||||||
Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db");
|
Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db");
|
||||||
m_generatorWatcher.setFuture(task);
|
m_generatorWatcher.setFuture(task);
|
||||||
}
|
}
|
||||||
|
@@ -1492,10 +1492,12 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
|
|||||||
setQuickFixAssistProvider(new ClangdQuickFixProvider(this));
|
setQuickFixAssistProvider(new ClangdQuickFixProvider(this));
|
||||||
if (!project) {
|
if (!project) {
|
||||||
QJsonObject initOptions;
|
QJsonObject initOptions;
|
||||||
|
const Utils::FilePath includeDir
|
||||||
|
= CppEditor::ClangdSettings(d->settings).clangdIncludePath();
|
||||||
const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(nullptr);
|
const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(nullptr);
|
||||||
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
||||||
*CppEditor::CppModelManager::instance()->fallbackProjectPart(),
|
*CppEditor::CppModelManager::instance()->fallbackProjectPart(),
|
||||||
warningsConfig);
|
warningsConfig, includeDir);
|
||||||
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage();
|
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage();
|
||||||
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
||||||
optionsBuilder, optionsForProject(nullptr, warningsConfig));
|
optionsBuilder, optionsForProject(nullptr, warningsConfig));
|
||||||
@@ -1918,9 +1920,10 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
|
|||||||
if (!projectPart)
|
if (!projectPart)
|
||||||
return;
|
return;
|
||||||
QJsonObject cdbChanges;
|
QJsonObject cdbChanges;
|
||||||
|
const Utils::FilePath includeDir = CppEditor::ClangdSettings(d->settings).clangdIncludePath();
|
||||||
const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project());
|
const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project());
|
||||||
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart,
|
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
||||||
warningsConfig);
|
*projectPart, warningsConfig, includeDir);
|
||||||
const CppEditor::ProjectFile file(filePath.toString(),
|
const CppEditor::ProjectFile file(filePath.toString(),
|
||||||
CppEditor::ProjectFile::classify(filePath.toString()));
|
CppEditor::ProjectFile::classify(filePath.toString()));
|
||||||
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
const QJsonArray projectPartOptions = fullProjectPartOptions(
|
||||||
|
@@ -310,7 +310,8 @@ void ClangModelManagerSupport::connectToWidgetsMarkContextMenuRequested(QWidget
|
|||||||
void ClangModelManagerSupport::updateLanguageClient(
|
void ClangModelManagerSupport::updateLanguageClient(
|
||||||
ProjectExplorer::Project *project, const CppEditor::ProjectInfo::ConstPtr &projectInfo)
|
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;
|
return;
|
||||||
const auto getJsonDbDir = [project] {
|
const auto getJsonDbDir = [project] {
|
||||||
if (const ProjectExplorer::Target * const target = project->activeTarget()) {
|
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);
|
const ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project);
|
||||||
auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, jsonDbDir,
|
auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, jsonDbDir,
|
||||||
CompilationDbPurpose::CodeModel,
|
CompilationDbPurpose::CodeModel,
|
||||||
warningsConfig, optionsForProject(project, warningsConfig));
|
warningsConfig, optionsForProject(project, warningsConfig),
|
||||||
|
includeDir);
|
||||||
generatorWatcher->setFuture(future);
|
generatorWatcher->setFuture(future);
|
||||||
m_generatorSynchronizer.addFuture(future);
|
m_generatorSynchronizer.addFuture(future);
|
||||||
}
|
}
|
||||||
|
@@ -172,7 +172,8 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
|||||||
const Utils::FilePath &baseDir,
|
const Utils::FilePath &baseDir,
|
||||||
CompilationDbPurpose purpose,
|
CompilationDbPurpose purpose,
|
||||||
const ClangDiagnosticConfig &warningsConfig,
|
const ClangDiagnosticConfig &warningsConfig,
|
||||||
const QStringList &projectOptions)
|
const QStringList &projectOptions,
|
||||||
|
const FilePath &clangIncludeDir)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!baseDir.isEmpty(), return GenerateCompilationDbResult(QString(),
|
QTC_ASSERT(!baseDir.isEmpty(), return GenerateCompilationDbResult(QString(),
|
||||||
QCoreApplication::translate("ClangUtils", "Could not retrieve build directory.")));
|
QCoreApplication::translate("ClangUtils", "Could not retrieve build directory.")));
|
||||||
@@ -192,8 +193,8 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
|||||||
const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions);
|
const QJsonArray jsonProjectOptions = QJsonArray::fromStringList(projectOptions);
|
||||||
for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) {
|
for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) {
|
||||||
QStringList args;
|
QStringList args;
|
||||||
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart,
|
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
||||||
warningsConfig);
|
*projectPart, warningsConfig, clangIncludeDir);
|
||||||
QJsonArray ppOptions;
|
QJsonArray ppOptions;
|
||||||
if (purpose == CompilationDbPurpose::Project) {
|
if (purpose == CompilationDbPurpose::Project) {
|
||||||
args = projectPartArguments(*projectPart);
|
args = projectPartArguments(*projectPart);
|
||||||
@@ -370,13 +371,12 @@ QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart,
|
CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart,
|
||||||
const ClangDiagnosticConfig &warningsConfig)
|
const ClangDiagnosticConfig &warningsConfig,
|
||||||
|
const Utils::FilePath &clangIncludeDir)
|
||||||
{
|
{
|
||||||
const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings()
|
const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings()
|
||||||
? UseBuildSystemWarnings::Yes
|
? UseBuildSystemWarnings::Yes
|
||||||
: UseBuildSystemWarnings::No;
|
: UseBuildSystemWarnings::No;
|
||||||
const FilePath clangIncludeDir = Core::ICore::clangIncludeDirectory(
|
|
||||||
QString(CLANG_VERSION), FilePath(CLANG_INCLUDE_DIR));
|
|
||||||
CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No,
|
CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No,
|
||||||
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No,
|
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No,
|
||||||
useBuildSystemWarnings, clangIncludeDir);
|
useBuildSystemWarnings, clangIncludeDir);
|
||||||
|
@@ -57,7 +57,8 @@ const QStringList optionsForProject(ProjectExplorer::Project *project,
|
|||||||
|
|
||||||
CppEditor::CompilerOptionsBuilder clangOptionsBuilder(
|
CppEditor::CompilerOptionsBuilder clangOptionsBuilder(
|
||||||
const CppEditor::ProjectPart &projectPart,
|
const CppEditor::ProjectPart &projectPart,
|
||||||
const CppEditor::ClangDiagnosticConfig &warningsConfig);
|
const CppEditor::ClangDiagnosticConfig &warningsConfig,
|
||||||
|
const Utils::FilePath &clangIncludeDir);
|
||||||
QJsonArray projectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder);
|
QJsonArray projectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder);
|
||||||
QJsonArray fullProjectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder,
|
QJsonArray fullProjectPartOptions(const CppEditor::CompilerOptionsBuilder &optionsBuilder,
|
||||||
const QStringList &projectOptions);
|
const QStringList &projectOptions);
|
||||||
@@ -89,7 +90,8 @@ public:
|
|||||||
enum class CompilationDbPurpose { Project, CodeModel };
|
enum class CompilationDbPurpose { Project, CodeModel };
|
||||||
GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::ConstPtr projectInfo,
|
GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::ConstPtr projectInfo,
|
||||||
const Utils::FilePath &baseDir, CompilationDbPurpose purpose,
|
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
|
class DiagnosticTextInfo
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user