aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cppeditor/cppcodemodelsettingspage.cpp')
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettingspage.cpp43
1 files changed, 36 insertions, 7 deletions
diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
index 46870ba2520..289cd3dc86c 100644
--- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
+++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp
@@ -10,8 +10,7 @@
#include "cpptoolsreuse.h"
#include <coreplugin/icore.h>
-
-#include <projectexplorer/session.h>
+#include <coreplugin/session.h>
#include <utils/algorithm.h>
#include <utils/infolabel.h>
@@ -73,8 +72,10 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(CppCodeModelSettings *s)
m_bigFilesLimitSpinBox->setValue(m_settings->indexerFileSizeLimitInMb());
m_ignoreFilesCheckBox = new QCheckBox(Tr::tr("Ignore files"));
- m_ignoreFilesCheckBox->setToolTip(Tr::tr(
- "<html><head/><body><p>Ignore files that match these wildcard patterns, one wildcard per line.</p></body></html>"));
+ m_ignoreFilesCheckBox->setToolTip(
+ "<html><head/><body><p>"
+ + Tr::tr("Ignore files that match these wildcard patterns, one wildcard per line.")
+ + "</p></body></html>");
m_ignoreFilesCheckBox->setChecked(m_settings->ignoreFiles());
m_ignorePatternTextEdit = new QPlainTextEdit(m_settings->ignorePattern());
@@ -103,7 +104,7 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(CppCodeModelSettings *s)
m_ignorePchCheckBox->setChecked(m_settings->pchUsage() == CppCodeModelSettings::PchUse_None);
m_useBuiltinPreprocessorCheckBox->setChecked(m_settings->useBuiltinPreprocessor());
- using namespace Utils::Layouting;
+ using namespace Layouting;
Column {
Group {
@@ -192,6 +193,7 @@ class ClangdSettingsWidget::Private
public:
QCheckBox useClangdCheckBox;
QComboBox indexingComboBox;
+ QComboBox headerSourceSwitchComboBox;
QCheckBox autoIncludeHeadersCheckBox;
QCheckBox sizeThresholdCheckBox;
QSpinBox threadLimitSpinBox;
@@ -220,6 +222,12 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
"cores unused.</p>"
"<p>Normal Priority: Reduced priority compared to interactive work.</p>"
"Low Priority: Same priority as other clangd work.");
+ const QString headerSourceSwitchToolTip = Tr::tr(
+ "<p>Which C/C++ backend to use when switching between header and source file."
+ "<p>The clangd implementation has more capabilities, but also has some bugs not present "
+ "in the built-in variant."
+ "<p>When \"Try Both\" is selected, clangd will be employed only if the built-in variant "
+ "does not find anything.");
const QString workerThreadsToolTip = Tr::tr(
"Number of worker threads used by clangd. Background indexing also uses this many "
"worker threads.");
@@ -241,6 +249,7 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
d->clangdChooser.setFilePath(settings.clangdFilePath());
d->clangdChooser.setAllowPathFromDevice(true);
d->clangdChooser.setEnabled(d->useClangdCheckBox.isChecked());
+ d->clangdChooser.setCommandVersionArguments({"--version"});
using Priority = ClangdSettings::IndexingPriority;
for (Priority prio : {Priority::Off, Priority::Background, Priority::Low, Priority::Normal}) {
d->indexingComboBox.addItem(ClangdSettings::priorityToDisplayString(prio), int(prio));
@@ -248,6 +257,15 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
d->indexingComboBox.setCurrentIndex(d->indexingComboBox.count() - 1);
}
d->indexingComboBox.setToolTip(indexingToolTip);
+ using SwitchMode = ClangdSettings::HeaderSourceSwitchMode;
+ for (SwitchMode mode : {SwitchMode::BuiltinOnly, SwitchMode::ClangdOnly, SwitchMode::Both}) {
+ d->headerSourceSwitchComboBox.addItem(
+ ClangdSettings::headerSourceSwitchModeToDisplayString(mode), int(mode));
+ if (mode == settings.headerSourceSwitchMode())
+ d->headerSourceSwitchComboBox.setCurrentIndex(
+ d->headerSourceSwitchComboBox.count() - 1);
+ }
+ d->headerSourceSwitchComboBox.setToolTip(headerSourceSwitchToolTip);
d->autoIncludeHeadersCheckBox.setText(Tr::tr("Insert header files on completion"));
d->autoIncludeHeadersCheckBox.setChecked(settings.autoIncludeHeaders());
d->autoIncludeHeadersCheckBox.setToolTip(autoIncludeToolTip);
@@ -293,6 +311,13 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
indexingPriorityLabel->setToolTip(indexingToolTip);
formLayout->addRow(indexingPriorityLabel, indexingPriorityLayout);
+ const auto headerSourceSwitchLayout = new QHBoxLayout;
+ headerSourceSwitchLayout->addWidget(&d->headerSourceSwitchComboBox);
+ headerSourceSwitchLayout->addStretch(1);
+ const auto headerSourceSwitchLabel = new QLabel(Tr::tr("Header/source switch mode:"));
+ headerSourceSwitchLabel->setToolTip(headerSourceSwitchToolTip);
+ formLayout->addRow(headerSourceSwitchLabel, headerSourceSwitchLayout);
+
const auto threadLimitLayout = new QHBoxLayout;
threadLimitLayout->addWidget(&d->threadLimitSpinBox);
threadLimitLayout->addStretch(1);
@@ -368,7 +393,7 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
connect(addButton, &QPushButton::clicked, this, [this, sessionsView] {
QInputDialog dlg(sessionsView);
- QStringList sessions = ProjectExplorer::SessionManager::sessions();
+ QStringList sessions = Core::SessionManager::sessions();
QStringList currentSessions = d->sessionsModel.stringList();
for (const QString &s : std::as_const(currentSessions))
sessions.removeOne(s);
@@ -400,7 +425,7 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
else
Core::EditorManager::openEditor(Utils::FilePath::fromString(link));
});
- layout->addWidget(Utils::Layouting::createHr());
+ layout->addWidget(Layouting::createHr());
layout->addWidget(configFilesHelpLabel);
layout->addStretch(1);
@@ -448,6 +473,8 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD
this, &ClangdSettingsWidget::settingsDataChanged);
connect(&d->indexingComboBox, &QComboBox::currentIndexChanged,
this, &ClangdSettingsWidget::settingsDataChanged);
+ connect(&d->headerSourceSwitchComboBox, &QComboBox::currentIndexChanged,
+ this, &ClangdSettingsWidget::settingsDataChanged);
connect(&d->autoIncludeHeadersCheckBox, &QCheckBox::toggled,
this, &ClangdSettingsWidget::settingsDataChanged);
connect(&d->threadLimitSpinBox, &QSpinBox::valueChanged,
@@ -478,6 +505,8 @@ ClangdSettings::Data ClangdSettingsWidget::settingsData() const
data.executableFilePath = d->clangdChooser.filePath();
data.indexingPriority = ClangdSettings::IndexingPriority(
d->indexingComboBox.currentData().toInt());
+ data.headerSourceSwitchMode = ClangdSettings::HeaderSourceSwitchMode(
+ d->headerSourceSwitchComboBox.currentData().toInt());
data.autoIncludeHeaders = d->autoIncludeHeadersCheckBox.isChecked();
data.workerThreadLimit = d->threadLimitSpinBox.value();
data.documentUpdateThreshold = d->documentUpdateThreshold.value();