[PATCH] D132762: [clang-format] Allow `throw` to be a keyword in front of casts
Emilia Dreamer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 26 14:35:05 PDT 2022
rymiel created this revision.
rymiel added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay, curdeius.
Herald added a project: All.
rymiel requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This makes `throw` more similar to `return`. However, unlike `return`,
it has to more strict as to not remove spaces after usages of `throw` as
a (deprecated) exception specifier.
Fixes https://github.com/llvm/llvm-project/issues/57391
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D132762
Files:
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -10958,6 +10958,7 @@
verifyFormat("my_int a = (my_int)2.0f;");
verifyFormat("my_int a = (my_int)sizeof(int);");
verifyFormat("return (my_int)aaa;");
+ verifyFormat("throw (my_int)aaa;");
verifyFormat("#define x ((int)-1)");
verifyFormat("#define LENGTH(x, y) (x) - (y) + 1");
verifyFormat("#define p(q) ((int *)&q)");
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -2153,7 +2153,7 @@
// before the parentheses, this is unlikely to be a cast.
if (LeftOfParens->Tok.getIdentifierInfo() &&
!LeftOfParens->isOneOf(Keywords.kw_in, tok::kw_return, tok::kw_case,
- tok::kw_delete)) {
+ tok::kw_delete, tok::kw_throw)) {
return false;
}
@@ -3312,6 +3312,10 @@
!Right.isOneOf(tok::semi, tok::r_paren, tok::hashhash)) {
return true;
}
+ if (Left.is(tok::kw_throw) && Right.is(tok::l_paren) && Right.MatchingParen &&
+ Right.MatchingParen->is(TT_CastRParen)) {
+ return true;
+ }
if (Style.isJson() && Left.is(tok::string_literal) && Right.is(tok::colon))
return false;
if (Left.is(Keywords.kw_assert) && Style.Language == FormatStyle::LK_Java)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D132762.456027.patch
Type: text/x-patch
Size: 1543 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220826/063d5b36/attachment.bin>
More information about the cfe-commits
mailing list