forked from qt-creator/qt-creator
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:
@@ -1031,4 +1031,9 @@ void ClangFormatBaseIndenter::setOverriddenStyle(const clang::format::FormatStyl
|
||||
d->m_overriddenStyle = style;
|
||||
}
|
||||
|
||||
bool ClangFormatBaseIndenter::respectsTabSettings() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace ClangFormat
|
||||
|
@@ -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; }
|
||||
|
@@ -235,4 +235,9 @@ std::optional<int> ClangFormatForwardingIndenter::margin() const
|
||||
return currentIndenter()->margin();
|
||||
}
|
||||
|
||||
bool ClangFormatForwardingIndenter::respectsTabSettings() const
|
||||
{
|
||||
return currentIndenter()->respectsTabSettings();
|
||||
}
|
||||
|
||||
} // namespace ClangFormat
|
||||
|
@@ -60,6 +60,8 @@ public:
|
||||
int cursorPositionInEditor = -1) override;
|
||||
std::optional<int> margin() const override;
|
||||
|
||||
bool respectsTabSettings() const override;
|
||||
|
||||
private:
|
||||
TextEditor::Indenter *currentIndenter() const;
|
||||
|
||||
|
@@ -108,6 +108,8 @@ public:
|
||||
|
||||
virtual std::optional<int> margin() const { return std::nullopt; }
|
||||
|
||||
virtual bool respectsTabSettings() const { return true; }
|
||||
|
||||
protected:
|
||||
QTextDocument *m_doc;
|
||||
Utils::FilePath m_fileName;
|
||||
|
@@ -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<void(TabSettings &tabSettings)> 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<void(TabSettings & tabSettings)> 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())
|
||||
|
Reference in New Issue
Block a user