summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodemodelsettingspage.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-02-23 13:51:41 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2021-04-22 07:32:58 +0000
commitecafdb7543927ffe8a9066ce24ed532a097fa21d (patch)
tree5f77d9fc9af3967af2bda56c052ccd4a351e0703 /src/plugins/cpptools/cppcodemodelsettingspage.cpp
parent8bacd9bdc49c376af69c81ac9acf2e9db1f10cb5 (diff)
downloadqt-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.cpp23
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;