diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index 7b4549a9b41..6fa11690538 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -1031,4 +1031,9 @@ void ClangFormatBaseIndenter::setOverriddenStyle(const clang::format::FormatStyl d->m_overriddenStyle = style; } +bool ClangFormatBaseIndenter::respectsTabSettings() const +{ + return false; +} + } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatbaseindenter.h b/src/plugins/clangformat/clangformatbaseindenter.h index 8d72bd4e0fe..8511e0d13ed 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.h +++ b/src/plugins/clangformat/clangformatbaseindenter.h @@ -55,6 +55,8 @@ public: void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences) final; void setOverriddenStyle(const clang::format::FormatStyle &style); + bool respectsTabSettings() const override; + protected: virtual bool formatCodeInsteadOfIndent() const { return false; } virtual bool formatWhileTyping() const { return false; } diff --git a/src/plugins/clangformat/clangformatindenter.cpp b/src/plugins/clangformat/clangformatindenter.cpp index 1b2d76813f1..5f30c77ebf9 100644 --- a/src/plugins/clangformat/clangformatindenter.cpp +++ b/src/plugins/clangformat/clangformatindenter.cpp @@ -235,4 +235,9 @@ std::optional ClangFormatForwardingIndenter::margin() const return currentIndenter()->margin(); } +bool ClangFormatForwardingIndenter::respectsTabSettings() const +{ + return currentIndenter()->respectsTabSettings(); +} + } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatindenter.h b/src/plugins/clangformat/clangformatindenter.h index be3d54e6c8d..19d4c997428 100644 --- a/src/plugins/clangformat/clangformatindenter.h +++ b/src/plugins/clangformat/clangformatindenter.h @@ -60,6 +60,8 @@ public: int cursorPositionInEditor = -1) override; std::optional margin() const override; + bool respectsTabSettings() const override; + private: TextEditor::Indenter *currentIndenter() const; diff --git a/src/plugins/texteditor/indenter.h b/src/plugins/texteditor/indenter.h index 645150fc6e6..c0acdb58248 100644 --- a/src/plugins/texteditor/indenter.h +++ b/src/plugins/texteditor/indenter.h @@ -108,6 +108,8 @@ public: virtual std::optional margin() const { return std::nullopt; } + virtual bool respectsTabSettings() const { return true; } + protected: QTextDocument *m_doc; Utils::FilePath m_fileName; diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index ac8e9800b40..5ddc6f1dcc1 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -314,51 +314,54 @@ private: QTC_ASSERT(m_doc, return); auto menu = new QMenu; menu->addAction(ActionManager::command(Constants::AUTO_INDENT_SELECTION)->action()); - auto documentSettings = menu->addMenu(Tr::tr("Document Settings")); + if (auto indenter = m_doc->indenter(); indenter && indenter->respectsTabSettings()) { + auto documentSettings = menu->addMenu(Tr::tr("Document Settings")); - auto modifyTabSettings = [this](std::function modifier) { - return [this, modifier]() { - auto ts = m_doc->tabSettings(); - modifier(ts); - m_doc->setTabSettings(ts); - }; - }; - documentSettings->addAction( - Tr::tr("Auto detect"), - modifyTabSettings([doc = m_doc->document()](TabSettings &tabSettings) { - tabSettings = tabSettings.autoDetect(doc); - })); - auto tabSettings = documentSettings->addMenu(Tr::tr("Tab Settings")); - tabSettings->addAction(Tr::tr("Spaces"), modifyTabSettings([](TabSettings &tabSettings) { - tabSettings.m_tabPolicy = TabSettings::SpacesOnlyTabPolicy; - })); - tabSettings->addAction(Tr::tr("Tabs"), modifyTabSettings([](TabSettings &tabSettings) { - tabSettings.m_tabPolicy = TabSettings::TabsOnlyTabPolicy; - })); - auto indentSize = documentSettings->addMenu(Tr::tr("Indent Size")); - auto indentSizeGroup = new QActionGroup(indentSize); - indentSizeGroup->setExclusive(true); - for (int i = 1; i <= 8; ++i) { - auto action = indentSizeGroup->addAction(QString::number(i)); - action->setCheckable(true); - action->setChecked(i == m_doc->tabSettings().m_indentSize); - connect(action, &QAction::triggered, modifyTabSettings([i](TabSettings &tabSettings) { - tabSettings.m_indentSize = i; - })); + auto modifyTabSettings = + [this](std::function modifier) { + return [this, modifier]() { + auto ts = m_doc->tabSettings(); + modifier(ts); + m_doc->setTabSettings(ts); + }; + }; + documentSettings->addAction( + Tr::tr("Auto detect"), + modifyTabSettings([doc = m_doc->document()](TabSettings &tabSettings) { + tabSettings = tabSettings.autoDetect(doc); + })); + auto tabSettings = documentSettings->addMenu(Tr::tr("Tab Settings")); + tabSettings->addAction(Tr::tr("Spaces"), modifyTabSettings([](TabSettings &tabSettings) { + tabSettings.m_tabPolicy = TabSettings::SpacesOnlyTabPolicy; + })); + tabSettings->addAction(Tr::tr("Tabs"), modifyTabSettings([](TabSettings &tabSettings) { + tabSettings.m_tabPolicy = TabSettings::TabsOnlyTabPolicy; + })); + auto indentSize = documentSettings->addMenu(Tr::tr("Indent Size")); + auto indentSizeGroup = new QActionGroup(indentSize); + indentSizeGroup->setExclusive(true); + for (int i = 1; i <= 8; ++i) { + auto action = indentSizeGroup->addAction(QString::number(i)); + action->setCheckable(true); + action->setChecked(i == m_doc->tabSettings().m_indentSize); + connect(action, &QAction::triggered, modifyTabSettings([i](TabSettings &tabSettings) { + tabSettings.m_indentSize = i; + })); + } + indentSize->addActions(indentSizeGroup->actions()); + auto tabSize = documentSettings->addMenu(Tr::tr("Tab Size")); + auto tabSizeGroup = new QActionGroup(tabSize); + tabSizeGroup->setExclusive(true); + for (int i = 1; i <= 8; ++i) { + auto action = tabSizeGroup->addAction(QString::number(i)); + action->setCheckable(true); + action->setChecked(i == m_doc->tabSettings().m_tabSize); + connect(action, &QAction::triggered, modifyTabSettings([i](TabSettings &tabSettings) { + tabSettings.m_tabSize = i; + })); + } + tabSize->addActions(tabSizeGroup->actions()); } - indentSize->addActions(indentSizeGroup->actions()); - auto tabSize = documentSettings->addMenu(Tr::tr("Tab Size")); - auto tabSizeGroup = new QActionGroup(tabSize); - tabSizeGroup->setExclusive(true); - for (int i = 1; i <= 8; ++i) { - auto action = tabSizeGroup->addAction(QString::number(i)); - action->setCheckable(true); - action->setChecked(i == m_doc->tabSettings().m_tabSize); - connect(action, &QAction::triggered, modifyTabSettings([i](TabSettings &tabSettings) { - tabSettings.m_tabSize = i; - })); - } - tabSize->addActions(tabSizeGroup->actions()); Id globalSettingsCategory; if (auto codeStyle = m_doc->codeStyle())