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,
|
||||
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);
|
||||
}
|
||||
|
@@ -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(
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
{
|
||||
|
Reference in New Issue
Block a user