[PATCH] D132762: [clang-format] Allow `throw` to be a keyword in front of casts
Björn Schäpers via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 5 03:36:28 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc6e7752f8e14: [clang-format] Allow `throw` to be a keyword in front of casts (authored by rymiel, committed by HazardyKnusperkeks).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132762/new/
https://reviews.llvm.org/D132762
Files:
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp
clang/unittests/Format/TokenAnnotatorTest.cpp
Index: clang/unittests/Format/TokenAnnotatorTest.cpp
===================================================================
--- clang/unittests/Format/TokenAnnotatorTest.cpp
+++ clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -319,6 +319,34 @@
EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_CastRParen);
}
+TEST_F(TokenAnnotatorTest, UnderstandsCasts) {
+ auto Tokens = annotate("(void)p;");
+ EXPECT_EQ(Tokens.size(), 6u) << Tokens;
+ EXPECT_TOKEN(Tokens[2], tok::r_paren, TT_CastRParen);
+
+ Tokens = annotate("auto x = (Foo)p;");
+ EXPECT_EQ(Tokens.size(), 9u) << Tokens;
+ EXPECT_TOKEN(Tokens[5], tok::r_paren, TT_CastRParen);
+
+ Tokens = annotate("(std::vector<int>)p;");
+ EXPECT_EQ(Tokens.size(), 11u) << Tokens;
+ EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_CastRParen);
+
+ Tokens = annotate("return (Foo)p;");
+ EXPECT_EQ(Tokens.size(), 7u) << Tokens;
+ EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_CastRParen);
+
+ Tokens = annotate("throw (Foo)p;");
+ EXPECT_EQ(Tokens.size(), 7u) << Tokens;
+ EXPECT_TOKEN(Tokens[3], tok::r_paren, TT_CastRParen);
+}
+
+TEST_F(TokenAnnotatorTest, UnderstandsDynamicExceptionSpecifier) {
+ auto Tokens = annotate("void f() throw(int);");
+ EXPECT_EQ(Tokens.size(), 10u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::kw_throw, TT_Unknown);
+}
+
TEST_F(TokenAnnotatorTest, UnderstandsFunctionRefQualifiers) {
auto Tokens = annotate("void f() &;");
EXPECT_EQ(Tokens.size(), 7u) << Tokens;
Index: clang/unittests/Format/FormatTest.cpp
===================================================================
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -11038,6 +11038,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)");
@@ -15730,6 +15731,7 @@
verifyFormat("Type *A = ( Type * )P;", Spaces);
verifyFormat("Type *A = ( vector<Type *, int *> )P;", Spaces);
verifyFormat("x = ( int32 )y;", Spaces);
+ verifyFormat("throw ( int32 )x;", Spaces);
verifyFormat("int a = ( int )(2.0f);", Spaces);
verifyFormat("#define AA(X) sizeof((( X * )NULL)->a)", Spaces);
verifyFormat("my_int a = ( my_int )sizeof(int);", Spaces);
@@ -15793,6 +15795,7 @@
verifyFormat("#define CONF_BOOL(x) ( bool ) (x)", Spaces);
verifyFormat("bool *y = ( bool * ) ( void * ) (x);", Spaces);
verifyFormat("bool *y = ( bool * ) (x);", Spaces);
+ verifyFormat("throw ( int32 ) x;", Spaces);
// Run subset of tests again with:
Spaces.SpacesInCStyleCastParentheses = false;
@@ -15817,6 +15820,8 @@
verifyFormat("bool *y = (bool *) (void *) (x);", Spaces);
verifyFormat("bool *y = (bool *) (void *) (int) (x);", Spaces);
verifyFormat("bool *y = (bool *) (void *) (int) foo(x);", Spaces);
+ verifyFormat("throw (int32) x;", Spaces);
+
Spaces.ColumnLimit = 80;
Spaces.IndentWidth = 4;
Spaces.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
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;
}
@@ -3315,6 +3315,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.457921.patch
Type: text/x-patch
Size: 4127 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220905/d00d0bc8/attachment-0001.bin>
More information about the cfe-commits
mailing list