llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-format Author: Owen Pan (owenca) <details> <summary>Changes</summary> Also, reformat clang-format source to remove redundant parentheses enclosing single list items. Fixes #<!-- -->100768. --- Full diff: https://github.com/llvm/llvm-project/pull/100852.diff 4 Files Affected: - (modified) clang/lib/Format/UnwrappedLineParser.cpp (+11-1) - (modified) clang/tools/clang-format/ClangFormat.cpp (+1-1) - (modified) clang/unittests/Format/FormatTest.cpp (+4) - (modified) clang/unittests/Format/MatchFilePathTest.cpp (+1-1) ``````````diff diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index d406a531a5c0c..3ebf8a44acc0f 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -2534,6 +2534,7 @@ bool UnwrappedLineParser::parseBracedList(bool IsAngleBracket, bool IsEnum) { bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) { assert(FormatTok->is(tok::l_paren) && "'(' expected."); auto *LeftParen = FormatTok; + bool SeenComma = false; bool SeenEqual = false; bool MightBeFoldExpr = false; const bool MightBeStmtExpr = Tokens->peekNextToken()->is(tok::l_brace); @@ -2553,10 +2554,14 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) { const auto *Next = Tokens->peekNextToken(); const bool DoubleParens = Prev && Prev->is(tok::l_paren) && Next && Next->is(tok::r_paren); + const bool CommaSeparated = + !DoubleParens && Prev && Prev->isOneOf(tok::l_paren, tok::comma) && + Next && Next->isOneOf(tok::comma, tok::r_paren); const auto *PrevPrev = Prev ? Prev->getPreviousNonComment() : nullptr; const bool Blacklisted = PrevPrev && (PrevPrev->isOneOf(tok::kw___attribute, tok::kw_decltype) || + SeenComma || (SeenEqual && (PrevPrev->isOneOf(tok::kw_if, tok::kw_while) || PrevPrev->endsSequence(tok::kw_constexpr, tok::kw_if)))); @@ -2566,7 +2571,8 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) { (!NestedLambdas.empty() && !NestedLambdas.back())) && Prev && Prev->isOneOf(tok::kw_return, tok::kw_co_return) && Next && Next->is(tok::semi); - if ((DoubleParens && !Blacklisted) || ReturnParens) { + if ((DoubleParens && !Blacklisted) || (CommaSeparated && !SeenComma) || + ReturnParens) { LeftParen->Optional = true; FormatTok->Optional = true; } @@ -2595,6 +2601,10 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType) { parseBracedList(); } break; + case tok::comma: + SeenComma = true; + nextToken(); + break; case tok::ellipsis: MightBeFoldExpr = true; nextToken(); diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index 6cba1267f3b0d..6582d73eae40e 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -364,7 +364,7 @@ emitReplacementWarnings(const Replacements &Replaces, StringRef AssumedFileName, : SourceMgr::DiagKind::DK_Warning, "code should be clang-formatted [-Wclang-format-violations]"); - Diag.print(nullptr, llvm::errs(), (ShowColors && !NoShowColors)); + Diag.print(nullptr, llvm::errs(), ShowColors && !NoShowColors); if (ErrorLimit && ++Errors >= ErrorLimit) break; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index d7f81813835fa..2a754a29e81e7 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -27445,6 +27445,10 @@ TEST_F(FormatTest, RemoveParentheses) { verifyFormat("static_assert((std::is_constructible_v<T, Args &&> && ...));", "static_assert(((std::is_constructible_v<T, Args &&> && ...)));", Style); + verifyFormat("foo((a, b));", "foo(((a, b)));", Style); + verifyFormat("foo((a, b));", "foo(((a), b));", Style); + verifyFormat("foo((a, b));", "foo((a, (b)));", Style); + verifyFormat("foo((a, b, c));", "foo((a, ((b)), c));", Style); verifyFormat("return (0);", "return (((0)));", Style); verifyFormat("return (({ 0; }));", "return ((({ 0; })));", Style); verifyFormat("return ((... && std::is_convertible_v<TArgsLocal, TArgs>));", diff --git a/clang/unittests/Format/MatchFilePathTest.cpp b/clang/unittests/Format/MatchFilePathTest.cpp index f41cf7f971596..28f665635718e 100644 --- a/clang/unittests/Format/MatchFilePathTest.cpp +++ b/clang/unittests/Format/MatchFilePathTest.cpp @@ -53,7 +53,7 @@ TEST_F(MatchFilePathTest, Newline) { TEST_F(MatchFilePathTest, Star) { EXPECT_TRUE(match(std::string(50, 'a'), "*a*a*a*a*a*a*a*a*a*a")); - EXPECT_FALSE(match((std::string(50, 'a') + 'b'), "*a*a*a*a*a*a*a*a*a*a")); + EXPECT_FALSE(match(std::string(50, 'a') + 'b', "*a*a*a*a*a*a*a*a*a*a")); } TEST_F(MatchFilePathTest, CaseSensitive) { `````````` </details> https://github.com/llvm/llvm-project/pull/100852 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits