r357957 - [clang-format] Add AfterCaseLabel to BraceWrapping
Owen Pan via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 8 16:36:26 PDT 2019
Author: owenpan
Date: Mon Apr 8 16:36:25 2019
New Revision: 357957
URL: http://llvm.org/viewvc/llvm-project?rev=357957&view=rev
Log:
[clang-format] Add AfterCaseLabel to BraceWrapping
Fixes PR38686
llvm-svn: 52527
Modified:
cfe/trunk/docs/ClangFormatStyleOptions.rst
cfe/trunk/include/clang/Format/Format.h
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/lib/Format/UnwrappedLineParser.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/docs/ClangFormatStyleOptions.rst
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangFormatStyleOptions.rst?rev=357957&r1=357956&r2=357957&view=diff
==============================================================================
--- cfe/trunk/docs/ClangFormatStyleOptions.rst (original)
+++ cfe/trunk/docs/ClangFormatStyleOptions.rst Mon Apr 8 16:36:25 2019
@@ -407,47 +407,46 @@ the configuration (without a prefix: ``A
};
void f() { bar(); }
+
+
**AllowShortIfStatementsOnASingleLine** (``ShortIfStyle``)
- Dependent on the value, ``if (a) return 0;`` can be put on a
- single line.
+ If ``true``, ``if (a) return;`` can be put on a single line.
Possible values:
* ``SIS_Never`` (in configuration: ``Never``)
- Do not allow short if functions.
+ Never put short ifs on the same line.
.. code-block:: c++
- if (a)
- return;
- else
- return;
+ if (a)
+ return ;
+ else {
+ return;
+ }
* ``SIS_WithoutElse`` (in configuration: ``WithoutElse``)
- Allow short if functions on the same line, as long as else
- is not a compound statement.
+ Without else put short ifs on the same line only if
+ the else is not a compound statement.
.. code-block:: c++
- if (a) return;
- else
- return;
-
- if (a)
- return;
- else {
- return;
- }
+ if (a) return;
+ else
+ return;
* ``SIS_Always`` (in configuration: ``Always``)
- Allow short if statements even if the else is a compound statement.
+ Always put short ifs on the same line if
+ the else is not a compound statement or not.
.. code-block:: c++
- if (a) return;
- else {
- return;
- }
+ if (a) return;
+ else {
+ return;
+ }
+
+
**AllowShortLambdasOnASingleLine** (``ShortLambdaStyle``)
Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
@@ -705,6 +704,23 @@ the configuration (without a prefix: ``A
Nested configuration flags:
+ * ``bool AfterCaseLabel`` Wrap case labels.
+
+ .. code-block:: c++
+
+ false: true:
+ switch (foo) { vs. switch (foo) {
+ case 1: { case 1:
+ bar(); {
+ break; bar();
+ } break;
+ default: { }
+ plop(); default:
+ } {
+ } plop();
+ }
+ }
+
* ``bool AfterClass`` Wrap class definitions.
.. code-block:: c++
@@ -1043,28 +1059,19 @@ the configuration (without a prefix: ``A
.. code-block:: c++
- try
- {
+ try {
foo();
}
- catch ()
- {
+ catch () {
}
void foo() { bar(); }
- class foo
- {
+ class foo {
};
- if (foo())
- {
+ if (foo()) {
}
- else
- {
+ else {
}
- enum X : int
- {
- A,
- B
- };
+ enum X : int { A, B };
* ``BS_GNU`` (in configuration: ``GNU``)
Always break before braces and add an extra level of indentation to
@@ -1504,6 +1511,7 @@ the configuration (without a prefix: ``A
#endif
+
**IndentWidth** (``unsigned``)
The number of columns to use for indentation.
@@ -1954,6 +1962,7 @@ the configuration (without a prefix: ``A
**SpaceAfterLogicalNot** (``bool``)
If ``true``, a space is inserted after the logical not operator (``!``).
+
.. code-block:: c++
true: false:
@@ -2033,6 +2042,19 @@ the configuration (without a prefix: ``A
}
}
+ * ``SBPO_NonEmptyParentheses`` (in configuration: ``NonEmptyParentheses``)
+ Put a space before opening parentheses only if the parentheses are not
+ empty i.e. '()'
+
+ .. code-block:: c++
+
+ void() {
+ if (true) {
+ f();
+ g (x, y, z);
+ }
+ }
+
* ``SBPO_Always`` (in configuration: ``Always``)
Always put a space before opening parentheses, except when it's
prohibited by the syntax rules (in function-like macro definitions) or
Modified: cfe/trunk/include/clang/Format/Format.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=357957&r1=357956&r2=357957&view=diff
==============================================================================
--- cfe/trunk/include/clang/Format/Format.h (original)
+++ cfe/trunk/include/clang/Format/Format.h Mon Apr 8 16:36:25 2019
@@ -715,6 +715,22 @@ struct FormatStyle {
/// AfterClass: true
/// \endcode
struct BraceWrappingFlags {
+ /// Wrap case labels.
+ /// \code
+ /// false: true:
+ /// switch (foo) { vs. switch (foo) {
+ /// case 1: { case 1:
+ /// bar(); {
+ /// break; bar();
+ /// } break;
+ /// default: { }
+ /// plop(); default:
+ /// } {
+ /// } plop();
+ /// }
+ /// }
+ /// \endcode
+ bool AfterCaseLabel;
/// Wrap class definitions.
/// \code
/// true:
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=357957&r1=357956&r2=357957&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Mon Apr 8 16:36:25 2019
@@ -511,6 +511,7 @@ template <> struct MappingTraits<FormatS
template <> struct MappingTraits<FormatStyle::BraceWrappingFlags> {
static void mapping(IO &IO, FormatStyle::BraceWrappingFlags &Wrapping) {
+ IO.mapOptional("AfterCaseLabel", Wrapping.AfterCaseLabel);
IO.mapOptional("AfterClass", Wrapping.AfterClass);
IO.mapOptional("AfterControlStatement", Wrapping.AfterControlStatement);
IO.mapOptional("AfterEnum", Wrapping.AfterEnum);
@@ -603,7 +604,7 @@ static FormatStyle expandPresets(const F
if (Style.BreakBeforeBraces == FormatStyle::BS_Custom)
return Style;
FormatStyle Expanded = Style;
- Expanded.BraceWrapping = {false, false, false, false, false,
+ Expanded.BraceWrapping = {false, false, false, false, false, false,
false, false, false, false, false,
false, false, true, true, true};
switch (Style.BreakBeforeBraces) {
@@ -628,6 +629,7 @@ static FormatStyle expandPresets(const F
Expanded.BraceWrapping.BeforeElse = true;
break;
case FormatStyle::BS_Allman:
+ Expanded.BraceWrapping.AfterCaseLabel = true;
Expanded.BraceWrapping.AfterClass = true;
Expanded.BraceWrapping.AfterControlStatement = true;
Expanded.BraceWrapping.AfterEnum = true;
@@ -641,7 +643,7 @@ static FormatStyle expandPresets(const F
break;
case FormatStyle::BS_GNU:
Expanded.BraceWrapping = {true, true, true, true, true, true, true, true,
- true, true, true, true, true, true, true};
+ true, true, true, true, true, true, true, true};
break;
case FormatStyle::BS_WebKit:
Expanded.BraceWrapping.AfterFunction = true;
@@ -680,7 +682,7 @@ FormatStyle getLLVMStyle(FormatStyle::La
LLVMStyle.BreakBeforeBinaryOperators = FormatStyle::BOS_None;
LLVMStyle.BreakBeforeTernaryOperators = true;
LLVMStyle.BreakBeforeBraces = FormatStyle::BS_Attach;
- LLVMStyle.BraceWrapping = {false, false, false, false, false,
+ LLVMStyle.BraceWrapping = {false, false, false, false, false, false,
false, false, false, false, false,
false, false, true, true, true};
LLVMStyle.BreakAfterJavaFieldAnnotations = false;
Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=357957&r1=357956&r2=357957&view=diff
==============================================================================
--- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
+++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Mon Apr 8 16:36:25 2019
@@ -172,10 +172,16 @@ class CompoundStatementIndenter {
public:
CompoundStatementIndenter(UnwrappedLineParser *Parser,
const FormatStyle &Style, unsigned &LineLevel)
+ : CompoundStatementIndenter(Parser, LineLevel,
+ Style.BraceWrapping.AfterControlStatement,
+ Style.BraceWrapping.IndentBraces) {
+ }
+ CompoundStatementIndenter(UnwrappedLineParser *Parser, unsigned &LineLevel,
+ bool WrapBrace, bool IndentBrace)
: LineLevel(LineLevel), OldLineLevel(LineLevel) {
- if (Style.BraceWrapping.AfterControlStatement)
+ if (WrapBrace)
Parser->addUnwrappedLine();
- if (Style.BraceWrapping.IndentBraces)
+ if (IndentBrace)
++LineLevel;
}
~CompoundStatementIndenter() { LineLevel = OldLineLevel; }
@@ -1950,7 +1956,9 @@ void UnwrappedLineParser::parseLabel() {
if (Line->Level > 1 || (!Line->InPPDirective && Line->Level > 0))
--Line->Level;
if (CommentsBeforeNextToken.empty() && FormatTok->Tok.is(tok::l_brace)) {
- CompoundStatementIndenter Indenter(this, Style, Line->Level);
+ CompoundStatementIndenter Indenter(this, Line->Level,
+ Style.BraceWrapping.AfterCaseLabel,
+ Style.BraceWrapping.IndentBraces);
parseBlock(/*MustBeDeclaration=*/false);
if (FormatTok->Tok.is(tok::kw_break)) {
if (Style.BraceWrapping.AfterControlStatement)
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=357957&r1=357956&r2=357957&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Apr 8 16:36:25 2019
@@ -1117,6 +1117,7 @@ TEST_F(FormatTest, FormatsSwitchStatemen
Style.IndentCaseLabels = true;
Style.AllowShortBlocksOnASingleLine = false;
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+ Style.BraceWrapping.AfterCaseLabel = true;
Style.BraceWrapping.AfterControlStatement = true;
EXPECT_EQ("switch (n)\n"
"{\n"
@@ -1138,6 +1139,27 @@ TEST_F(FormatTest, FormatsSwitchStatemen
" }\n"
"}",
Style));
+ Style.BraceWrapping.AfterCaseLabel = false;
+ EXPECT_EQ("switch (n)\n"
+ "{\n"
+ " case 0: {\n"
+ " return false;\n"
+ " }\n"
+ " default: {\n"
+ " return true;\n"
+ " }\n"
+ "}",
+ format("switch (n) {\n"
+ " case 0:\n"
+ " {\n"
+ " return false;\n"
+ " }\n"
+ " default:\n"
+ " {\n"
+ " return true;\n"
+ " }\n"
+ "}",
+ Style));
}
TEST_F(FormatTest, CaseRanges) {
@@ -1291,6 +1313,7 @@ TEST_F(FormatTest, ShortCaseLabels) {
Style));
Style.AllowShortCaseLabelsOnASingleLine = true;
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
+ Style.BraceWrapping.AfterCaseLabel = true;
Style.BraceWrapping.AfterControlStatement = true;
EXPECT_EQ("switch (n)\n"
"{\n"
@@ -11356,6 +11379,7 @@ TEST_F(FormatTest, ParsesConfigurationBo
CHECK_PARSE_BOOL(SpaceBeforeInheritanceColon);
CHECK_PARSE_BOOL(SpaceBeforeRangeBasedForLoopColon);
+ CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterCaseLabel);
CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterClass);
CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterControlStatement);
CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterEnum);
@@ -12841,20 +12865,18 @@ TEST_F(FormatTest, ConfigurableContinuat
TEST_F(FormatTest, WrappedClosingParenthesisIndent) {
FormatStyle Style = getLLVMStyle();
- verifyFormat(
- "int Foo::getter(\n"
- " //\n"
- ") const {\n"
- " return foo;\n"
- "}",
- Style);
- verifyFormat(
- "void Foo::setter(\n"
- " //\n"
- ") {\n"
- " foo = 1;\n"
- "}",
- Style);
+ verifyFormat("int Foo::getter(\n"
+ " //\n"
+ ") const {\n"
+ " return foo;\n"
+ "}",
+ Style);
+ verifyFormat("void Foo::setter(\n"
+ " //\n"
+ ") {\n"
+ " foo = 1;\n"
+ "}",
+ Style);
}
TEST_F(FormatTest, SpacesInAngles) {
More information about the cfe-commits
mailing list