diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index 40b7a56e3cd..cd05a5efd24 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -772,7 +772,8 @@ void ClangFormatBaseIndenter::autoIndent(const QTextCursor &cursor, } } -clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) +clang::format::FormatStyle ClangFormatBaseIndenter::overrideStyle( + const Utils::FilePath &fileName) const { const ProjectExplorer::Project *projectForFile = ProjectExplorer::ProjectManager::projectForFile(fileName); @@ -782,6 +783,9 @@ clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) ? projectForFile->editorConfiguration()->codeStyle("Cpp")->currentPreferences() : TextEditor::TextEditorSettings::codeStyle("Cpp")->currentPreferences(); + if (m_overriddenPreferences) + preferences = m_overriddenPreferences->currentPreferences(); + Utils::FilePath filePath = filePathToCurrentSettings(preferences); if (!filePath.exists()) @@ -844,4 +848,9 @@ const clang::format::FormatStyle &ClangFormatBaseIndenter::styleForFile() const return m_cachedStyle.style; } +void ClangFormatBaseIndenter::setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences) +{ + m_overriddenPreferences = preferences; +} + } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatbaseindenter.h b/src/plugins/clangformat/clangformatbaseindenter.h index 70d59661710..69eac8a3ba2 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.h +++ b/src/plugins/clangformat/clangformatbaseindenter.h @@ -49,6 +49,8 @@ public: const clang::format::FormatStyle &styleForFile() const; + void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences); + protected: virtual bool formatCodeInsteadOfIndent() const { return false; } virtual bool formatWhileTyping() const { return false; } @@ -84,6 +86,9 @@ private: }; mutable CachedStyle m_cachedStyle; + + clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) const; + TextEditor::ICodeStylePreferences *m_overriddenPreferences = nullptr; }; } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 73b8a3c0b30..dc0d6837118 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -150,7 +150,9 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc displaySettings.m_visualizeWhitespace = true; m_preview->setDisplaySettings(displaySettings); m_preview->setPlainText(QLatin1String(CppEditor::Constants::DEFAULT_CODE_STYLE_SNIPPETS[0])); - m_preview->textDocument()->setIndenter(new ClangFormatIndenter(m_preview->document())); + auto *indenter = new ClangFormatIndenter(m_preview->document()); + indenter->setOverriddenPreferences(codeStyle); + m_preview->textDocument()->setIndenter(indenter); m_preview->textDocument()->setFontSettings(TextEditor::TextEditorSettings::fontSettings()); m_preview->textDocument()->resetSyntaxHighlighter( [] { return new CppEditor::CppHighlighter(); }); @@ -288,7 +290,7 @@ void ClangFormatConfigWidget::updatePreview() QTextCursor cursor(m_preview->document()); cursor.setPosition(0); cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); - m_preview->textDocument()->autoIndent(cursor); + m_preview->textDocument()->autoFormatOrIndent(cursor); } std::string ClangFormatConfigWidget::readFile(const QString &path) diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index 383efef58df..cea4e5c0bc4 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -605,6 +605,11 @@ public: m_codeStyleEditor->apply(); } + void finish() final + { + m_codeStyleEditor->finish(); + } + CppCodeStylePreferences *m_pageCppCodeStylePreferences = nullptr; CodeStyleEditorWidget *m_codeStyleEditor; };