diff options
Diffstat (limited to 'src/plugins/cppeditor/cppcodemodelsettingspage.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppcodemodelsettingspage.cpp | 43 |
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(); |