[PATCH] D150629: [clang-format] Don't allow template to be preceded by closing brace
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGe4d3e8880239: [clang-format] Dont allow template to be preceded by closing brace (authored by rymiel). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150629/new/ https://reviews.llvm.org/D150629 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 @@ -480,6 +480,23 @@ EXPECT_TOKEN(Tokens[8], tok::greater, TT_BinaryOperator); } +TEST_F(TokenAnnotatorTest, UnderstandsNonTemplateAngleBrackets) { + auto Tokens = annotate("return a < b && c > d;"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator); + + Tokens = annotate("a < 0 ? b : a > 0 ? c : d;"); + ASSERT_EQ(Tokens.size(), 15u) << Tokens; + EXPECT_TOKEN(Tokens[1], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[7], tok::greater, TT_BinaryOperator); + + Tokens = annotate("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); + ASSERT_EQ(Tokens.size(), 27u) << Tokens; + EXPECT_TOKEN(Tokens[7], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[20], tok::greater, TT_BinaryOperator); +} + TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) { FormatStyle Style = getLLVMStyle(); Style.WhitespaceSensitiveMacros.push_back("FOO"); Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 && (!Previous.Previous->MatchingParen || !Previous.Previous->MatchingParen->is( Index: clang/unittests/Format/TokenAnnotatorTest.cpp === --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -480,6 +480,23 @@ EXPECT_TOKEN(Tokens[8], tok::greater, TT_BinaryOperator); } +TEST_F(TokenAnnotatorTest, UnderstandsNonTemplateAngleBrackets) { + auto Tokens = annotate("return a < b && c > d;"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator); + + Tokens = annotate("a < 0 ? b : a > 0 ? c : d;"); + ASSERT_EQ(Tokens.size(), 15u) << Tokens; + EXPECT_TOKEN(Tokens[1], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[7], tok::greater, TT_BinaryOperator); + + Tokens = annotate("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); + ASSERT_EQ(Tokens.size(), 27u) << Tokens; + EXPECT_TOKEN(Tokens[7], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[20], tok::greater, TT_BinaryOperator); +} + TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) { FormatStyle Style = getLLVMStyle(); Style.WhitespaceSensitiveMacros.push_back("FOO"); Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 &&
[PATCH] D150629: [clang-format] Don't allow template to be preceded by closing brace
rymiel updated this revision to Diff 522776. rymiel added a comment. Add annotator tests Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150629/new/ https://reviews.llvm.org/D150629 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 @@ -480,6 +480,23 @@ EXPECT_TOKEN(Tokens[8], tok::greater, TT_BinaryOperator); } +TEST_F(TokenAnnotatorTest, UnderstandsNonTemplateAngleBrackets) { + auto Tokens = annotate("return a < b && c > d;"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator); + + Tokens = annotate("a < 0 ? b : a > 0 ? c : d;"); + ASSERT_EQ(Tokens.size(), 15u) << Tokens; + EXPECT_TOKEN(Tokens[1], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[7], tok::greater, TT_BinaryOperator); + + Tokens = annotate("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); + ASSERT_EQ(Tokens.size(), 27u) << Tokens; + EXPECT_TOKEN(Tokens[7], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[20], tok::greater, TT_BinaryOperator); +} + TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) { FormatStyle Style = getLLVMStyle(); Style.WhitespaceSensitiveMacros.push_back("FOO"); Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 && (!Previous.Previous->MatchingParen || !Previous.Previous->MatchingParen->is( Index: clang/unittests/Format/TokenAnnotatorTest.cpp === --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -480,6 +480,23 @@ EXPECT_TOKEN(Tokens[8], tok::greater, TT_BinaryOperator); } +TEST_F(TokenAnnotatorTest, UnderstandsNonTemplateAngleBrackets) { + auto Tokens = annotate("return a < b && c > d;"); + ASSERT_EQ(Tokens.size(), 10u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[6], tok::greater, TT_BinaryOperator); + + Tokens = annotate("a < 0 ? b : a > 0 ? c : d;"); + ASSERT_EQ(Tokens.size(), 15u) << Tokens; + EXPECT_TOKEN(Tokens[1], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[7], tok::greater, TT_BinaryOperator); + + Tokens = annotate("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); + ASSERT_EQ(Tokens.size(), 27u) << Tokens; + EXPECT_TOKEN(Tokens[7], tok::less, TT_BinaryOperator); + EXPECT_TOKEN(Tokens[20], tok::greater, TT_BinaryOperator); +} + TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) { FormatStyle Style = getLLVMStyle(); Style.WhitespaceSensitiveMacros.push_back("FOO"); Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 && (!Previous.Previous->MatchingParen || !Previous.Previous->MatchingParen->is( ___ cfe-commits mailing
[PATCH] D150629: [clang-format] Don't allow template to be preceded by closing brace
HazardyKnusperkeks added inline comments. Comment at: clang/unittests/Format/FormatTest.cpp:10682 verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" owenpan wrote: > Do we need to add a token annotator test? > Do we need to add a token annotator test? I'm in favor of one. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150629/new/ https://reviews.llvm.org/D150629 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D150629: [clang-format] Don't allow template to be preceded by closing brace
owenpan added inline comments. Comment at: clang/unittests/Format/FormatTest.cpp:10682 verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" Do we need to add a token annotator test? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150629/new/ https://reviews.llvm.org/D150629 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D150629: [clang-format] Don't allow template to be preceded by closing brace
rymiel created this revision. rymiel added a project: clang-format. rymiel added reviewers: HazardyKnusperkeks, owenpan, MyDeveloperDay. Herald added projects: All, clang. Herald added a subscriber: cfe-commits. rymiel requested review of this revision. This check is similar to the right paren check right below it, but it doesn't need the overloaded operator check. This patch prevents brace-initialized objects that are being compared from being mis-annotated as template parameters. Fixes https://github.com/llvm/llvm-project/issues/57004 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D150629 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 @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 && (!Previous.Previous->MatchingParen || !Previous.Previous->MatchingParen->is( Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10679,6 +10679,7 @@ // Not template parameters. verifyFormat("return a < b && c > d;"); verifyFormat("a < 0 ? b : a > 0 ? c : d;"); + verifyFormat("ratio{-1, 2} < ratio{-1, 3} == -1 / 3 > -1 / 2;"); verifyFormat("void f() {\n" " while (a < b && c > d) {\n" " }\n" Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -144,6 +144,8 @@ if (Previous.Previous) { if (Previous.Previous->Tok.isLiteral()) return false; + if (Previous.Previous->is(tok::r_brace)) +return false; if (Previous.Previous->is(tok::r_paren) && Contexts.size() > 1 && (!Previous.Previous->MatchingParen || !Previous.Previous->MatchingParen->is( ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits