[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
This revision was automatically updated to reflect the committed changes. Closed by commit rG3bbdf06b2827: [clang-format] Fix annotating when deleting array of pointers (authored by jackh jackhuang1...@gmail.com). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 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 @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,9 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +if (PrevToken->endsSequence(tok::r_square, tok::l_square, tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { Index: clang/unittests/Format/TokenAnnotatorTest.cpp === --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,9 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +if (PrevToken->endsSequence(tok::r_square, tok::l_square, tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
owenpan accepted this revision. owenpan added a comment. Please mark https://reviews.llvm.org/D132911#inline-1279832 as done. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
jackhong12 marked 7 inline comments as done. jackhong12 added inline comments. Comment at: clang/lib/Format/TokenAnnotator.cpp:2375-2378 +const FormatToken *Prev = PrevToken; +if (Prev->is(tok::r_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::l_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::kw_delete)) owenpan wrote: > `endsSequence()` is exactly what you want here. ;) Thanks! It looks more concise now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
jackhong12 updated this revision to Diff 456836. jackhong12 retitled this revision from "Fix annotating when deleting array of pointers" to "[clang-format] Fix annotating when deleting array of pointers". jackhong12 edited the summary of this revision. jackhong12 added a comment. Add left alignment test Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 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 @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,9 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +if (PrevToken->endsSequence(tok::r_square, tok::l_square, tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { Index: clang/unittests/Format/TokenAnnotatorTest.cpp === --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Left; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,9 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +if (PrevToken->endsSequence(tok::r_square, tok::l_square, tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
owenpan added inline comments. Comment at: clang/lib/Format/TokenAnnotator.cpp:2375-2378 +const FormatToken *Prev = PrevToken; +if (Prev->is(tok::r_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::l_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::kw_delete)) `endsSequence()` is exactly what you want here. ;) Comment at: clang/unittests/Format/FormatTest.cpp:10538 + Style.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("delete[] *ptr;", Style); A typo? Comment at: clang/unittests/Format/FormatTest.cpp:10541 + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + MyDeveloperDay wrote: > could you cover the other PointerAlignment case for completeness IMO, testing only `PAS_Left` would suffice as we just want to ensure that no spaces are added after the `*`s. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
HazardyKnusperkeks added a comment. Please mark comments as done, when the discussion has ended. Comment at: clang/lib/Format/TokenAnnotator.cpp:2376 +const FormatToken *Prev = PrevToken; +if (Prev->is(tok::r_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::l_square) && (Prev = Prev->getPreviousNonComment()) && I don't know if this is nice. I think I would prefer `PrevToken->getPreviousNonComment()` and subsequently `PrevToken->getPreviousNonComment()->getPreviousNonComment()`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
MyDeveloperDay accepted this revision. MyDeveloperDay added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/Format/TokenAnnotator.cpp:2381-2385 if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { return TT_BinaryOperator; } jackhong12 wrote: > The `*` token in `delete *x;` will be annotated as UnaryOperator > (dereferencing a pointer). > > In the case `delete[] *x;`, there is a `]` before `*`. So, it will be > annotated as BinaryOperator by this rule. > > I think both `*` here should be UnaryOperator. Therefore, I add a new rule to > match the `delete[]` pattern. `it will be annotated as BinaryOperator by this rule.` of course my bad Comment at: clang/unittests/Format/FormatTest.cpp:10541 + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + could you cover the other PointerAlignment case for completeness Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
jackhong12 added inline comments. Comment at: clang/lib/Format/TokenAnnotator.cpp:2381-2385 if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { return TT_BinaryOperator; } The `*` token in `delete *x;` will be annotated as UnaryOperator (dereferencing a pointer). In the case `delete[] *x;`, there is a `]` before `*`. So, it will be annotated as BinaryOperator by this rule. I think both `*` here should be UnaryOperator. Therefore, I add a new rule to match the `delete[]` pattern. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
jackhong12 added a comment. In this case, I think it's dereferencing a pointer instead of multiplying two numbers. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
MyDeveloperDay added inline comments. Comment at: clang/lib/Format/TokenAnnotator.cpp:2379 +Prev->is(tok::kw_delete)) + return TT_UnaryOperator; + Why unary here, doesn’t that make it a multiply? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132911: [clang-format] Fix annotating when deleting array of pointers
jackhong12 updated this revision to Diff 456563. jackhong12 added a comment. Annotate `*` as UnaryOperator instead of `PointerOrReference` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132911/new/ https://reviews.llvm.org/D132911 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 @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,12 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +const FormatToken *Prev = PrevToken; +if (Prev->is(tok::r_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::l_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) { Index: clang/unittests/Format/TokenAnnotatorTest.cpp === --- clang/unittests/Format/TokenAnnotatorTest.cpp +++ clang/unittests/Format/TokenAnnotatorTest.cpp @@ -120,6 +120,17 @@ Tokens = annotate("int i = int{42} * 2;"); EXPECT_EQ(Tokens.size(), 11u) << Tokens; EXPECT_TOKEN(Tokens[7], tok::star, TT_BinaryOperator); + + Tokens = annotate("delete[] *ptr;"); + EXPECT_EQ(Tokens.size(), 7u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] **ptr;"); + EXPECT_EQ(Tokens.size(), 8u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); + EXPECT_TOKEN(Tokens[4], tok::star, TT_UnaryOperator); + Tokens = annotate("delete[] *(ptr);"); + EXPECT_EQ(Tokens.size(), 9u) << Tokens; + EXPECT_TOKEN(Tokens[3], tok::star, TT_UnaryOperator); } TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) { Index: clang/unittests/Format/FormatTest.cpp === --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -10535,6 +10535,11 @@ "} & = {};", Style); + Style.PointerAlignment = FormatStyle::PAS_Right; + verifyFormat("delete[] *ptr;", Style); + verifyFormat("delete[] **ptr;", Style); + verifyFormat("delete[] *(ptr);", Style); + verifyIndependentOfContext("MACRO(int *i);"); verifyIndependentOfContext("MACRO(auto *a);"); verifyIndependentOfContext("MACRO(const A *a);"); Index: clang/lib/Format/TokenAnnotator.cpp === --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2372,6 +2372,12 @@ !PrevToken->MatchingParen) return TT_PointerOrReference; +const FormatToken *Prev = PrevToken; +if (Prev->is(tok::r_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::l_square) && (Prev = Prev->getPreviousNonComment()) && +Prev->is(tok::kw_delete)) + return TT_UnaryOperator; + if (PrevToken->Tok.isLiteral() || PrevToken->isOneOf(tok::r_paren, tok::r_square, tok::kw_true, tok::kw_false, tok::r_brace)) {