anastasiia_lukianenko updated this revision to Diff 307797.
anastasiia_lukianenko added a comment.
1. Diff was made by svn tool with full context
2. Added description in documentation
3. Added unit test
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91949/new/
https://reviews.llvm.org/D91949
Files:
clang/docs/ClangFormatStyleOptions.rst
clang/include/clang/Format/Format.h
clang/lib/Format/ContinuationIndenter.cpp
clang/lib/Format/Format.cpp
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -5046,6 +5046,24 @@
format(Input, Style));
}
+TEST_F(FormatTest, BreakBeforeStructInitialization) {
+ FormatStyle Style = getLLVMStyle();
+ Style.ColumnLimit = 80;
+ Style.BreakBeforeStructInitialization = true;
+ verifyFormat("struct new_struct struct_name = \n"
+ "{\n"
+ " a = 1,\n"
+ " b = 2,\n"
+ "};",
+ Style);
+ Style.BreakBeforeStructInitialization = false;
+ verifyFormat("struct new_struct struct_name = {\n"
+ " a = 1,\n"
+ " b = 2,\n"
+ "};",
+ Style);
+}
+
TEST_F(FormatTest, BreakConstructorInitializersAfterColon) {
FormatStyle Style = getLLVMStyle();
Style.BreakConstructorInitializers = FormatStyle::BCIS_AfterColon;
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -3489,6 +3489,9 @@
bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line,
const FormatToken &Right) {
const FormatToken &Left = *Right.Previous;
+ if (Style.BreakBeforeStructInitialization && Right.is(tok::l_brace) &&
+ (Right.is(BK_BracedInit) || Left.is(tok::equal)))
+ return true;
if (Right.NewlinesBefore > 1 && Style.MaxEmptyLinesToKeep > 0)
return true;
Index: clang/lib/Format/Format.cpp
===================================================================
--- clang/lib/Format/Format.cpp
+++ clang/lib/Format/Format.cpp
@@ -513,6 +513,9 @@
Style.BreakInheritanceList == FormatStyle::BILS_BeforeColon)
Style.BreakInheritanceList = FormatStyle::BILS_BeforeComma;
+ IO.mapOptional("BreakBeforeStructInitialization",
+ Style.BreakBeforeStructInitialization);
+
IO.mapOptional("BreakBeforeTernaryOperators",
Style.BreakBeforeTernaryOperators);
Index: clang/lib/Format/ContinuationIndenter.cpp
===================================================================
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -953,6 +953,8 @@
const FormatToken &Previous = *Current.Previous;
// If we are continuing an expression, we want to use the continuation indent.
+ if (Style.BreakBeforeStructInitialization)
+ Style.ContinuationIndentWidth = 0;
unsigned ContinuationIndent =
std::max(State.Stack.back().LastSpace, State.Stack.back().Indent) +
Style.ContinuationIndentWidth;
Index: clang/include/clang/Format/Format.h
===================================================================
--- clang/include/clang/Format/Format.h
+++ clang/include/clang/Format/Format.h
@@ -1160,6 +1160,23 @@
/// \endcode
BraceWrappingFlags BraceWrapping;
+ /// If ``true``, struct left brace will be placed after line breaks.
+ /// \code
+ /// true:
+ /// struct new_struct struct_name =
+ /// {
+ /// a = 1,
+ /// b = 2,
+ /// };
+ ///
+ /// false:
+ /// struct new_struct struct_name = {
+ /// a = 1,
+ /// b = 2,
+ /// };
+ /// \endcode
+ bool BreakBeforeStructInitialization;
+
/// If ``true``, ternary operators will be placed after line breaks.
/// \code
/// true:
@@ -2431,6 +2448,7 @@
BinPackParameters == R.BinPackParameters &&
BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
BreakBeforeBraces == R.BreakBeforeBraces &&
+ BreakBeforeStructInitialization == R.BreakBeforeStructInitialization &&
BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
BreakConstructorInitializers == R.BreakConstructorInitializers &&
CompactNamespaces == R.CompactNamespaces &&
Index: clang/docs/ClangFormatStyleOptions.rst
===================================================================
--- clang/docs/ClangFormatStyleOptions.rst
+++ clang/docs/ClangFormatStyleOptions.rst
@@ -1382,6 +1382,24 @@
+**BreakBeforeStructInitialization** (``bool``)
+ If ``true``, struct left brace will be placed after line breaks.
+
+ .. code-block:: c++
+
+ true:
+ struct new_struct struct_name =
+ {
+ a = 1,
+ b = 2,
+ };
+
+ false:
+ struct new_struct struct_name = {
+ a = 1,
+ b = 2,
+ };
+
**BreakBeforeTernaryOperators** (``bool``)
If ``true``, ternary operators will be placed after line breaks.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits