r217022 - clang-format: Add an option 'SpaceAfterCStyleCast'.

Martin Liška mliska at suse.cz
Thu Sep 4 08:07:32 PDT 2014


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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list