forked from OSchip/llvm-project
[clang-format] Recognize c++ coroutine keywords as unary operator to avoid misleading pointer alignment
Summary: The clang-format may go wrong when handle c++ coroutine keywords and pointer. The default value for PointerAlignment is PAS_Right. So the following format is good: ``` co_return *a; ``` But within some code style, the value for PointerAlignment is PAS_Left, the behavior goes wrong: ``` co_return* a; ``` test-plan: check-clang reviewers: MyDeveloperDay Differential Revision: https://reviews.llvm.org/D91245
This commit is contained in:
parent
ffe84d90e9
commit
8b48d24373
|
@ -1964,6 +1964,7 @@ private:
|
|||
|
||||
if (PrevToken->isOneOf(tok::l_paren, tok::l_square, tok::l_brace,
|
||||
tok::comma, tok::semi, tok::kw_return, tok::colon,
|
||||
tok::kw_co_return, tok::kw_co_await, tok::kw_co_yield,
|
||||
tok::equal, tok::kw_delete, tok::kw_sizeof,
|
||||
tok::kw_throw) ||
|
||||
PrevToken->isOneOf(TT_BinaryOperator, TT_ConditionalExpr,
|
||||
|
|
|
@ -7755,6 +7755,15 @@ TEST_F(FormatTest, UnderstandsUnaryOperators) {
|
|||
|
||||
verifyFormat("co_yield -1;");
|
||||
verifyFormat("co_return -1;");
|
||||
|
||||
// Check that * is not treated as a binary operator when we set PointerAlignment
|
||||
// as PAS_Left after a keyword and not a declaration.
|
||||
FormatStyle PASLeftStyle = getLLVMStyle();
|
||||
PASLeftStyle.PointerAlignment = FormatStyle::PAS_Left;
|
||||
verifyFormat("co_return *a;", PASLeftStyle);
|
||||
verifyFormat("co_await *a;", PASLeftStyle);
|
||||
verifyFormat("co_yield *a", PASLeftStyle);
|
||||
verifyFormat("return *a;", PASLeftStyle);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, DoesNotIndentRelativeToUnaryOperators) {
|
||||
|
|
Loading…
Reference in New Issue