r357344 - [clang-format]: Add NonEmptyParentheses spacing option
Author: reuk Date: Sat Mar 30 05:32:35 2019 New Revision: 357344 URL: http://llvm.org/viewvc/llvm-project?rev=357344&view=rev Log: [clang-format]: Add NonEmptyParentheses spacing option This patch aims to add support for the following rules from the JUCE coding standards: - Always put a space before an open parenthesis that contains text - e.g. foo (123); - Never put a space before an empty pair of open/close parenthesis - e.g. foo(); Patch by Reuben Thomas Differential Revision: https://reviews.llvm.org/D55170 Modified: cfe/trunk/include/clang/Format/Format.h cfe/trunk/lib/Format/Format.cpp cfe/trunk/lib/Format/TokenAnnotator.cpp cfe/trunk/lib/Format/TokenAnnotator.h cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=357344&r1=357343&r2=357344&view=diff == --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Sat Mar 30 05:32:35 2019 @@ -1690,6 +1690,17 @@ struct FormatStyle { ///} /// \endcode SBPO_ControlStatements, +/// Put a space before opening parentheses only if the parentheses are not +/// empty i.e. '()' +/// \code +/// void() { +/// if (true) { +/// f(); +/// g (x, y, z); +/// } +/// } +/// \endcode +SBPO_NonEmptyParentheses, /// Always put a space before opening parentheses, except when it's /// prohibited by the syntax rules (in function-like macro definitions) or /// when determined by other style rules (after unary operators, opening Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=357344&r1=357343&r2=357344&view=diff == --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Sat Mar 30 05:32:35 2019 @@ -285,6 +285,8 @@ struct ScalarEnumerationTraitshttp://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=357344&r1=357343&r2=357344&view=diff == --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original) +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Sat Mar 30 05:32:35 2019 @@ -2453,6 +2453,12 @@ unsigned TokenAnnotator::splitPenalty(co return 3; } +bool TokenAnnotator::spaceRequiredBeforeParens(const FormatToken &Right) const { + return Style.SpaceBeforeParens == FormatStyle::SBPO_Always || + (Style.SpaceBeforeParens == FormatStyle::SBPO_NonEmptyParentheses && + Right.ParameterCount > 0); +} + bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, const FormatToken &Left, const FormatToken &Right) { @@ -2599,9 +2605,9 @@ bool TokenAnnotator::spaceRequiredBetwee (Left.isOneOf(tok::kw_try, Keywords.kw___except, tok::kw_catch, tok::kw_new, tok::kw_delete) && (!Left.Previous || Left.Previous->isNot(tok::period) || - (Style.SpaceBeforeParens == FormatStyle::SBPO_Always && + (spaceRequiredBeforeParens(Right) && (Left.is(tok::identifier) || Left.isFunctionLikeKeyword() || - Left.is(tok::r_paren) || + Left.is(tok::r_paren) || Left.isSimpleTypeSpecifier() || (Left.is(tok::r_square) && Left.MatchingParen && Left.MatchingParen->is(TT_LambdaLSquare))) && Line.Type != LT_PreprocessorDirective); @@ -2795,7 +2801,7 @@ bool TokenAnnotator::spaceRequiredBefore Left.isOneOf(TT_TrailingReturnArrow, TT_LambdaArrow)) return true; if (Right.is(TT_OverloadedOperatorLParen)) -return Style.SpaceBeforeParens == FormatStyle::SBPO_Always; +return spaceRequiredBeforeParens(Right); if (Left.is(tok::comma)) return true; if (Right.is(tok::comma)) @@ -2879,7 +2885,7 @@ bool TokenAnnotator::spaceRequiredBefore return true; if (Left.is(TT_TemplateCloser) && Right.is(tok::l_paren) && Right.isNot(TT_FunctionTypeLParen)) -return Style.SpaceBeforeParens == FormatStyle::SBPO_Always; +return spaceRequiredBeforeParens(Right); if (Right.is(TT_TemplateOpener) && Left.is(tok::r_paren) && Left.MatchingParen && Left.MatchingParen->is(TT_OverloadedOperatorLParen)) return false; Modified: cfe/trunk/lib/Format/TokenAnnotator.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=357344&r1=357343&r2=357344&view=diff == --- cfe/trunk/lib/Format/TokenAnnotator.h (original) +++ cfe/trunk/lib/Format/TokenAnnotator.h Sat Mar 30 05:32:35 2019 @@ -164,6 +16
r357908 - [clang-format] Optionally insert a space after unary ! operator
Author: reuk Date: Mon Apr 8 05:54:48 2019 New Revision: 357908 URL: http://llvm.org/viewvc/llvm-project?rev=357908&view=rev Log: [clang-format] Optionally insert a space after unary ! operator 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=357908&r1=357907&r2=357908&view=diff == --- cfe/trunk/docs/ClangFormatStyleOptions.rst (original) +++ cfe/trunk/docs/ClangFormatStyleOptions.rst Mon Apr 8 05:54:48 2019 @@ -1952,6 +1952,13 @@ the configuration (without a prefix: ``A true: false: (int) i; vs. (int)i; +**SpaceAfterLogicalNot** (``bool``) + If ``true``, a space is inserted after the logical not operator (``!``). + .. code-block:: c++ + + true: false: + ! someExpression();vs. !someExpression(); + **SpaceAfterTemplateKeyword** (``bool``) If ``true``, a space will be inserted after the 'template' keyword. Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=357908&r1=357907&r2=357908&view=diff == --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Mon Apr 8 05:54:48 2019 @@ -1628,6 +1628,13 @@ struct FormatStyle { /// \endcode bool SpaceAfterCStyleCast; + /// If ``true``, a space is inserted after the logical not operator (``!``). + /// \code + ///true: false: + ///! someExpression();vs. !someExpression(); + /// \endcode + bool SpaceAfterLogicalNot; + /// If \c true, a space will be inserted after the 'template' keyword. /// \code ///true: false: @@ -1911,6 +1918,7 @@ struct FormatStyle { PointerAlignment == R.PointerAlignment && RawStringFormats == R.RawStringFormats && SpaceAfterCStyleCast == R.SpaceAfterCStyleCast && + SpaceAfterLogicalNot == R.SpaceAfterLogicalNot && SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword && SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators && SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList && Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=357908&r1=357907&r2=357908&view=diff == --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Mon Apr 8 05:54:48 2019 @@ -478,6 +478,7 @@ template <> struct MappingTraitshttp://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=357908&r1=357907&r2=357908&view=diff == --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original) +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Mon Apr 8 05:54:48 2019 @@ -2832,7 +2832,8 @@ bool TokenAnnotator::spaceRequiredBefore return true; } if (Left.is(TT_UnaryOperator)) -return Right.is(TT_BinaryOperator); +return (Style.SpaceAfterLogicalNot && Left.is(tok::exclaim)) || + Right.is(TT_BinaryOperator); // If the next token is a binary operator or a selector name, we have // incorrectly classified the parenthesis as a cast. FIXME: Detect correctly. Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=357908&r1=357907&r2=357908&view=diff == --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Apr 8 05:54:48 2019 @@ -9719,6 +9719,17 @@ TEST_F(FormatTest, ConfigurableSpaceBefo verifyFormat("auto lambda = []() { return 0; };", SomeSpace); } +TEST_F(FormatTest, SpaceAfterLogicalNot) { + FormatStyle Spaces = getLLVMStyle(); + Spaces.SpaceAfterLogicalNot = true; + + verifyFormat("bool x = ! y", Spaces); + verifyFormat("if (! isFailure())", Spaces); + verifyFormat("if (! (a && b))", Spaces); + verifyFormat("\"Error!\"", Spaces); + verifyFormat("! ! x", Spaces); +} + TEST_F(FormatTest, ConfigurableSpacesInParentheses) { FormatStyle Spaces = getLLVMStyle(); @@ -11511,6 +11522,12 @@ TEST_F(FormatTest, ParsesConfiguration) CHECK_PARSE("SpaceAfterControlStatementKeyword: true", SpaceBeforeParens, FormatStyle
r358441 - [clang-format] Fix -Wconversion-null warning in GCC
Author: reuk Date: Mon Apr 15 13:13:20 2019 New Revision: 358441 URL: http://llvm.org/viewvc/llvm-project?rev=358441&view=rev Log: [clang-format] Fix -Wconversion-null warning in GCC GCC -Wconversion-null warning appeared after 9a63380260860b657b72f07c4f0e61e382ab934a. There was a similar problem already in the past: http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20131230/096230.html Patch committed on behalf of @dendibakh Differential Revision: https://reviews.llvm.org/D60726 Modified: cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=358441&r1=358440&r2=358441&view=diff == --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Apr 15 13:13:20 2019 @@ -11393,6 +11393,7 @@ TEST_F(FormatTest, ParsesConfigurationBo CHECK_PARSE_BOOL(SpacesInCStyleCastParentheses); CHECK_PARSE_BOOL(SpaceAfterCStyleCast); CHECK_PARSE_BOOL(SpaceAfterTemplateKeyword); + CHECK_PARSE_BOOL(SpaceAfterLogicalNot); CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators); CHECK_PARSE_BOOL(SpaceBeforeCpp11BracedList); CHECK_PARSE_BOOL(SpaceBeforeCtorInitializerColon); @@ -11566,12 +11567,6 @@ TEST_F(FormatTest, ParsesConfiguration) CHECK_PARSE("SpaceAfterControlStatementKeyword: true", SpaceBeforeParens, FormatStyle::SBPO_ControlStatements); - Style.SpaceAfterLogicalNot = false; - CHECK_PARSE("SpaceAfterLogicalNot: true", SpaceAfterLogicalNot, - true); - CHECK_PARSE("SpaceAfterLogicalNot: false", SpaceAfterLogicalNot, - false); - Style.ColumnLimit = 123; FormatStyle BaseStyle = getLLVMStyle(); CHECK_PARSE("BasedOnStyle: LLVM", ColumnLimit, BaseStyle.ColumnLimit); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits