Skip to content

Commit 513b10d

Browse files
authored
[clang-format] Fix formatting of requires expressions in braced initializers (#163005)
`UnwrappedLineParser::parseBracedList` had no explicit handling for the `requires` keyword, so it would just call `nextToken()` instead of properly parsing the `requires` expression. This fix adds a case for `tok::kw_requires` in `parseBracedList`, calling `parseRequiresExpression` to handle it correctly, matching the existing behavior in `parseParens`. Fixes #162984.
1 parent 92f1af3 commit 513b10d

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

clang/lib/Format/UnwrappedLineParser.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2569,6 +2569,12 @@ bool UnwrappedLineParser::parseBracedList(bool IsAngleBracket, bool IsEnum) {
25692569
if (IsEnum && !Style.AllowShortEnumsOnASingleLine)
25702570
addUnwrappedLine();
25712571
break;
2572+
case tok::kw_requires: {
2573+
auto *RequiresToken = FormatTok;
2574+
nextToken();
2575+
parseRequiresExpression(RequiresToken);
2576+
break;
2577+
}
25722578
default:
25732579
nextToken();
25742580
break;

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,11 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresExpressions) {
14901490
EXPECT_TOKEN(Tokens[4], tok::l_paren, TT_RequiresExpressionLParen);
14911491
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_RequiresExpressionLBrace);
14921492

1493+
Tokens = annotate("bool foo{requires { 0; }};");
1494+
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
1495+
EXPECT_TOKEN(Tokens[3], tok::kw_requires, TT_RequiresExpression);
1496+
EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_RequiresExpressionLBrace);
1497+
14931498
Tokens = annotate("if (requires(int i) { i + 5; }) return;");
14941499
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
14951500
EXPECT_TOKEN(Tokens[2], tok::kw_requires, TT_RequiresExpression);

0 commit comments

Comments
 (0)