-
Notifications
You must be signed in to change notification settings - Fork 14.9k
[clang-format] Fix formatting of requires
expressions in braced initializers
#163005
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang-format] Fix formatting of requires
expressions in braced initializers
#163005
Conversation
…alizers When clang-format encountered a requires expression inside a braced initializer (e.g., `bool foo{requires { 0; }};`), it would incorrectly format the code to the following: bool bar{requires {0; } } ; The issue was that 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 [1]. Fixes llvm#162984. [1]: https://github.com/llvm/llvm-project/blob/7eee67202378932d03331ad04e7d07ed4d988381/clang/lib/Format/UnwrappedLineParser.cpp#L2713-L2718 Signed-off-by: Ruoyu Zhong <zhongruoyu@outlook.com>
@llvm/pr-subscribers-clang-format Author: Ruoyu Zhong (ZhongRuoyu) ChangesWhen clang-format encountered a bool bar{requires {0;
}
}
; The issue was that This fix adds a case for llvm-project/clang/lib/Format/UnwrappedLineParser.cpp Lines 2713 to 2718 in 7eee672
Fixes #162984. Full diff: https://github.com/llvm/llvm-project/pull/163005.diff 2 Files Affected:
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 28797433e06e3..dec71191d7356 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -2569,6 +2569,12 @@ bool UnwrappedLineParser::parseBracedList(bool IsAngleBracket, bool IsEnum) {
if (IsEnum && !Style.AllowShortEnumsOnASingleLine)
addUnwrappedLine();
break;
+ case tok::kw_requires: {
+ auto *RequiresToken = FormatTok;
+ nextToken();
+ parseRequiresExpression(RequiresToken);
+ break;
+ }
default:
nextToken();
break;
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index fef70365b5e18..5a8056e310d45 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -26973,6 +26973,12 @@ TEST_F(FormatTest, RequiresExpressionIndentation) {
Style);
}
+TEST_F(FormatTest, RequiresExpressionInBracedInitializer) {
+ verifyFormat("bool foo{requires { 0; }};");
+ verifyFormat("int bar{requires(T t) { t.f(); }};");
+ verifyFormat("auto baz{requires { typename T::type; } && true};");
+}
+
TEST_F(FormatTest, StatementAttributeLikeMacros) {
FormatStyle Style = getLLVMStyle();
StringRef Source = "void Foo::slot() {\n"
|
…braced initializer
… braced initializer Co-authored-by: Owen Pan <owenpiano@gmail.com>
f769ff0
to
e836a16
Compare
…tializers (llvm#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 llvm#162984.
…tializers (llvm#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 llvm#162984.
When clang-format encountered a
requires
expression inside a braced initializer (e.g.,bool foo{requires { 0; }};
), it would incorrectly format the code to the following:The issue was that
UnwrappedLineParser::parseBracedList
had no explicit handling for therequires
keyword, so it would just callnextToken()
instead of properly parsing therequires
expression.This fix adds a case for
tok::kw_requires
inparseBracedList
, callingparseRequiresExpression
to handle it correctly, matching the existing behavior inparseParens
:llvm-project/clang/lib/Format/UnwrappedLineParser.cpp
Lines 2713 to 2718 in 7eee672
Fixes #162984.