Hello!

Thank you for the patch, works as I expected.

Martin

On 09/03/2014 09:37 AM, Daniel Jasper wrote:
Author: djasper
Date: Wed Sep  3 02:37:29 2014
New Revision: 217022

URL: http://llvm.org/viewvc/llvm-project?rev=217022&view=rev
Log:
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.

Modified:
     cfe/trunk/docs/ClangFormatStyleOptions.rst
     cfe/trunk/include/clang/Format/Format.h
     cfe/trunk/lib/Format/Format.cpp
     cfe/trunk/lib/Format/TokenAnnotator.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=217022&r1=217021&r2=217022&view=diff
==============================================================================
--- cfe/trunk/docs/ClangFormatStyleOptions.rst (original)
+++ cfe/trunk/docs/ClangFormatStyleOptions.rst Wed Sep  3 02:37:29 2014
@@ -411,6 +411,9 @@ the configuration (without a prefix: ``A
  **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).

Modified: cfe/trunk/include/clang/Format/Format.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=217022&r1=217021&r2=217022&view=diff
==============================================================================
--- cfe/trunk/include/clang/Format/Format.h (original)
+++ cfe/trunk/include/clang/Format/Format.h Wed Sep  3 02:37:29 2014
@@ -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 &&

Modified: cfe/trunk/lib/Format/Format.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=217022&r1=217021&r2=217022&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Wed Sep  3 02:37:29 2014
@@ -228,6 +228,7 @@ template <> struct MappingTraits<FormatS
      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;

Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=217022&r1=217021&r2=217022&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Sep  3 02:37:29 2014
@@ -1641,9 +1641,10 @@ bool TokenAnnotator::spaceRequiredBefore
             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 &&

Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=217022&r1=217021&r2=217022&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Sep  3 02:37:29 2014
@@ -7721,6 +7721,38 @@ TEST_F(FormatTest, ConfigurableSpacesInP
                 "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, ParsesConfigurationBo
    CHECK_PARSE_BOOL(SpaceInEmptyParentheses);
    CHECK_PARSE_BOOL(SpacesInContainerLiterals);
    CHECK_PARSE_BOOL(SpacesInCStyleCastParentheses);
+  CHECK_PARSE_BOOL(SpaceAfterCStyleCast);
    CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators);
  }

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to