clang-format: Add an option 'SpaceAfterCStyleCast'.
This permits to add a space after closing parenthesis of a C-style cast. Defaults to false to preserve old behavior. Fixes llvm.org/PR19982. Before: (int)i; After: (int) i; Patch by Marek Kurdej. llvm-svn: 217022
This commit is contained in:
parent
c578567b07
commit
db986eb6bb
@ -411,6 +411,9 @@ the configuration (without a prefix: ``Auto``).
|
||||
**SpacesInCStyleCastParentheses** (``bool``)
|
||||
If ``true``, spaces may be inserted into C style casts.
|
||||
|
||||
**SpaceAfterCStyleCast** (``bool``)
|
||||
If ``true``, a space may be inserted after C style casts.
|
||||
|
||||
**SpacesInContainerLiterals** (``bool``)
|
||||
If ``true``, spaces are inserted inside container literals (e.g.
|
||||
ObjC and Javascript array and dict literals).
|
||||
|
||||
@ -324,6 +324,9 @@ struct FormatStyle {
|
||||
/// \brief If \c true, spaces may be inserted into C style casts.
|
||||
bool SpacesInCStyleCastParentheses;
|
||||
|
||||
/// \brief If \c true, a space may be inserted after C style casts.
|
||||
bool SpaceAfterCStyleCast;
|
||||
|
||||
/// \brief Different ways to put a space before opening parentheses.
|
||||
enum SpaceBeforeParensOptions {
|
||||
/// Never put a space before opening parentheses.
|
||||
@ -422,6 +425,7 @@ struct FormatStyle {
|
||||
SpaceInEmptyParentheses == R.SpaceInEmptyParentheses &&
|
||||
SpacesInContainerLiterals == R.SpacesInContainerLiterals &&
|
||||
SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
|
||||
SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
|
||||
SpaceBeforeParens == R.SpaceBeforeParens &&
|
||||
SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
|
||||
ContinuationIndentWidth == R.ContinuationIndentWidth &&
|
||||
|
||||
@ -228,6 +228,7 @@ template <> struct MappingTraits<FormatStyle> {
|
||||
IO.mapOptional("SpaceInEmptyParentheses", Style.SpaceInEmptyParentheses);
|
||||
IO.mapOptional("SpacesInCStyleCastParentheses",
|
||||
Style.SpacesInCStyleCastParentheses);
|
||||
IO.mapOptional("SpaceAfterCStyleCast", Style.SpaceAfterCStyleCast);
|
||||
IO.mapOptional("SpacesInContainerLiterals",
|
||||
Style.SpacesInContainerLiterals);
|
||||
IO.mapOptional("SpaceBeforeAssignmentOperators",
|
||||
@ -351,6 +352,7 @@ FormatStyle getLLVMStyle() {
|
||||
LLVMStyle.SpaceInEmptyParentheses = false;
|
||||
LLVMStyle.SpacesInContainerLiterals = true;
|
||||
LLVMStyle.SpacesInCStyleCastParentheses = false;
|
||||
LLVMStyle.SpaceAfterCStyleCast = false;
|
||||
LLVMStyle.SpaceBeforeParens = FormatStyle::SBPO_ControlStatements;
|
||||
LLVMStyle.SpaceBeforeAssignmentOperators = true;
|
||||
LLVMStyle.SpacesInAngles = false;
|
||||
|
||||
@ -1641,9 +1641,10 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line,
|
||||
Tok.getNextNonComment() && Tok.Type != TT_ObjCMethodExpr &&
|
||||
!Tok.Previous->is(tok::question) &&
|
||||
(Tok.Type != TT_DictLiteral || Style.SpacesInContainerLiterals);
|
||||
if (Tok.Previous->Type == TT_UnaryOperator ||
|
||||
Tok.Previous->Type == TT_CastRParen)
|
||||
if (Tok.Previous->Type == TT_UnaryOperator)
|
||||
return Tok.Type == TT_BinaryOperator;
|
||||
if (Tok.Previous->Type == TT_CastRParen)
|
||||
return Style.SpaceAfterCStyleCast || Tok.Type == TT_BinaryOperator;
|
||||
if (Tok.Previous->is(tok::greater) && Tok.is(tok::greater)) {
|
||||
return Tok.Type == TT_TemplateCloser &&
|
||||
Tok.Previous->Type == TT_TemplateCloser &&
|
||||
|
||||
@ -7721,6 +7721,38 @@ TEST_F(FormatTest, ConfigurableSpacesInParentheses) {
|
||||
"default:\n"
|
||||
" break;\n"
|
||||
"}", Spaces);
|
||||
|
||||
Spaces.SpaceAfterCStyleCast = true;
|
||||
verifyFormat("call(x, y, z);", Spaces);
|
||||
verifyFormat("while (( bool ) 1)\n"
|
||||
" continue;",
|
||||
Spaces);
|
||||
verifyFormat("for (;;)\n"
|
||||
" continue;",
|
||||
Spaces);
|
||||
verifyFormat("if (true)\n"
|
||||
" f( );\n"
|
||||
"else if (true)\n"
|
||||
" f( );",
|
||||
Spaces);
|
||||
verifyFormat("do {\n"
|
||||
" do_something(( int ) i);\n"
|
||||
"} while (something( ));",
|
||||
Spaces);
|
||||
verifyFormat("switch (x) {\n"
|
||||
"default:\n"
|
||||
" break;\n"
|
||||
"}",
|
||||
Spaces);
|
||||
Spaces.SpacesInCStyleCastParentheses = false;
|
||||
Spaces.SpaceAfterCStyleCast = true;
|
||||
verifyFormat("while ((bool) 1)\n"
|
||||
" continue;",
|
||||
Spaces);
|
||||
verifyFormat("do {\n"
|
||||
" do_something((int) i);\n"
|
||||
"} while (something( ));",
|
||||
Spaces);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, ConfigurableSpacesInSquareBrackets) {
|
||||
@ -8306,6 +8338,7 @@ TEST_F(FormatTest, ParsesConfigurationBools) {
|
||||
CHECK_PARSE_BOOL(SpaceInEmptyParentheses);
|
||||
CHECK_PARSE_BOOL(SpacesInContainerLiterals);
|
||||
CHECK_PARSE_BOOL(SpacesInCStyleCastParentheses);
|
||||
CHECK_PARSE_BOOL(SpaceAfterCStyleCast);
|
||||
CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user