diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-02-23 13:51:41 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-04-22 07:32:58 +0000 |
commit | ecafdb7543927ffe8a9066ce24ed532a097fa21d (patch) | |
tree | 5f77d9fc9af3967af2bda56c052ccd4a351e0703 /src/plugins/cpptools/cppcodemodelsettingspage.cpp | |
parent | 8bacd9bdc49c376af69c81ac9acf2e9db1f10cb5 (diff) | |
download | qt-creator-ecafdb7543927ffe8a9066ce24ed532a097fa21d.tar.gz |
ClangCodeModel: Add experimental clangd support
If the user has enabled clangd (default is off), we start up one instance
per project when it is opened/changed (including build config switches),
and trigger background indexing.
So far, the index is used to provide results for locators and "Find
Usages".
Per-document functionality such as semantic highlighting and completion
is still provided by libclang.
Change-Id: I12532fca1b9c6278baab560e7238cba6189cde9f
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppcodemodelsettingspage.cpp')
-rw-r--r-- | src/plugins/cpptools/cppcodemodelsettingspage.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index 2c1b0ddc02..00e7b8081a 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -100,6 +100,9 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() const bool isClangActive = CppModelManager::instance()->isClangCodeModelActive(); m_ui->clangCodeModelIsDisabledHint->setVisible(!isClangActive); m_ui->clangCodeModelIsEnabledHint->setVisible(isClangActive); + m_ui->clangdCheckBox->setVisible(isClangActive); + m_ui->clangdChooser->setVisible(isClangActive); + for (int i = 0; i < m_ui->clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) { QWidget *widget = m_ui->clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget(); if (widget) @@ -117,6 +120,16 @@ void CppCodeModelSettingsWidget::setupGeneralWidgets() const bool ignorePch = m_settings->pchUsage() == CppCodeModelSettings::PchUse_None; m_ui->ignorePCHCheckBox->setChecked(ignorePch); + + m_ui->clangdCheckBox->setChecked(m_settings->useClangd()); + m_ui->clangdCheckBox->setToolTip(tr("Use clangd for locators and \"Find References\".\n" + "Changing this option does not affect projects that are already open.")); + m_ui->clangdChooser->setExpectedKind(Utils::PathChooser::ExistingCommand); + m_ui->clangdChooser->setFilePath(codeModelSettings()->clangdFilePath()); + m_ui->clangdChooser->setEnabled(m_ui->clangdCheckBox->isChecked()); + connect(m_ui->clangdCheckBox, &QCheckBox::toggled, m_ui->clangdChooser, [this](bool checked) { + m_ui->clangdChooser->setEnabled(checked); + }); } bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const @@ -163,6 +176,16 @@ bool CppCodeModelSettingsWidget::applyGeneralWidgetsToSettings() const m_settings->setIndexerFileSizeLimitInMb(newFileSizeLimit); settingsChanged = true; } + const bool newUseClangd = m_ui->clangdCheckBox->isChecked(); + if (m_settings->useClangd() != newUseClangd) { + m_settings->setUseClangd(newUseClangd); + settingsChanged = true; + } + const Utils::FilePath newClangdPath = m_ui->clangdChooser->rawFilePath(); + if (m_settings->clangdFilePath() != newClangdPath) { + m_settings->setClangdFilePath(newClangdPath); + settingsChanged = true; + } const bool newIgnorePch = m_ui->ignorePCHCheckBox->isChecked(); const bool previousIgnorePch = m_settings->pchUsage() == CppCodeModelSettings::PchUse_None; |