Editor: Do not allow changing document tab settings for clangformat

the clangformat plugin ignores our internal tab settings so there is no
need to be able to change those settings for files that are indented by
the clang format indenter.

Change-Id: I7b91f84e9ec4fbe977024aa648f49ea0b0dc6bcf
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2024-11-26 13:49:27 +01:00
parent fb964aa7d7
commit ac25398b7b
6 changed files with 62 additions and 43 deletions

View File

@@ -1031,4 +1031,9 @@ void ClangFormatBaseIndenter::setOverriddenStyle(const clang::format::FormatStyl
d->m_overriddenStyle = style; d->m_overriddenStyle = style;
} }
bool ClangFormatBaseIndenter::respectsTabSettings() const
{
return false;
}
} // namespace ClangFormat } // namespace ClangFormat

View File

@@ -55,6 +55,8 @@ public:
void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences) final; void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences) final;
void setOverriddenStyle(const clang::format::FormatStyle &style); void setOverriddenStyle(const clang::format::FormatStyle &style);
bool respectsTabSettings() const override;
protected: protected:
virtual bool formatCodeInsteadOfIndent() const { return false; } virtual bool formatCodeInsteadOfIndent() const { return false; }
virtual bool formatWhileTyping() const { return false; } virtual bool formatWhileTyping() const { return false; }

View File

@@ -235,4 +235,9 @@ std::optional<int> ClangFormatForwardingIndenter::margin() const
return currentIndenter()->margin(); return currentIndenter()->margin();
} }
bool ClangFormatForwardingIndenter::respectsTabSettings() const
{
return currentIndenter()->respectsTabSettings();
}
} // namespace ClangFormat } // namespace ClangFormat

View File

@@ -60,6 +60,8 @@ public:
int cursorPositionInEditor = -1) override; int cursorPositionInEditor = -1) override;
std::optional<int> margin() const override; std::optional<int> margin() const override;
bool respectsTabSettings() const override;
private: private:
TextEditor::Indenter *currentIndenter() const; TextEditor::Indenter *currentIndenter() const;

View File

@@ -108,6 +108,8 @@ public:
virtual std::optional<int> margin() const { return std::nullopt; } virtual std::optional<int> margin() const { return std::nullopt; }
virtual bool respectsTabSettings() const { return true; }
protected: protected:
QTextDocument *m_doc; QTextDocument *m_doc;
Utils::FilePath m_fileName; Utils::FilePath m_fileName;

View File

@@ -314,9 +314,11 @@ private:
QTC_ASSERT(m_doc, return); QTC_ASSERT(m_doc, return);
auto menu = new QMenu; auto menu = new QMenu;
menu->addAction(ActionManager::command(Constants::AUTO_INDENT_SELECTION)->action()); menu->addAction(ActionManager::command(Constants::AUTO_INDENT_SELECTION)->action());
if (auto indenter = m_doc->indenter(); indenter && indenter->respectsTabSettings()) {
auto documentSettings = menu->addMenu(Tr::tr("Document Settings")); auto documentSettings = menu->addMenu(Tr::tr("Document Settings"));
auto modifyTabSettings = [this](std::function<void(TabSettings &tabSettings)> modifier) { auto modifyTabSettings =
[this](std::function<void(TabSettings & tabSettings)> modifier) {
return [this, modifier]() { return [this, modifier]() {
auto ts = m_doc->tabSettings(); auto ts = m_doc->tabSettings();
modifier(ts); modifier(ts);
@@ -359,6 +361,7 @@ private:
})); }));
} }
tabSize->addActions(tabSizeGroup->actions()); tabSize->addActions(tabSizeGroup->actions());
}
Id globalSettingsCategory; Id globalSettingsCategory;
if (auto codeStyle = m_doc->codeStyle()) if (auto codeStyle = m_doc->codeStyle())