llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-format Author: Owen Pan (owenca) <details> <summary>Changes</summary> Fix #<!-- -->78666 --- Full diff: https://github.com/llvm/llvm-project/pull/138631.diff 2 Files Affected: - (modified) clang/lib/Format/TokenAnnotator.cpp (+5-15) - (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+13) ``````````diff diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index caf386cffd25b..7257debe94fd5 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1719,22 +1719,12 @@ class AnnotatingParser { break; } if (Style.isCSharp()) { - // `Type?)`, `Type?>`, `Type? name;` and `Type? name =` can only be + // `Type?)`, `Type?>`, `Type? name;`, and `Type? name =` can only be // nullable types. - - // `Type?)`, `Type?>`, `Type? name;` - if (Tok->Next && - (Tok->Next->startsSequence(tok::question, tok::r_paren) || - Tok->Next->startsSequence(tok::question, tok::greater) || - Tok->Next->startsSequence(tok::question, tok::identifier, - tok::semi))) { - Tok->setType(TT_CSharpNullable); - break; - } - - // `Type? name =` - if (Tok->Next && Tok->Next->is(tok::identifier) && Tok->Next->Next && - Tok->Next->Next->is(tok::equal)) { + if (const auto *Next = Tok->getNextNonComment(); + Next && (Next->isOneOf(tok::r_paren, tok::greater) || + Next->startsSequence(tok::identifier, tok::semi) || + Next->startsSequence(tok::identifier, tok::equal))) { Tok->setType(TT_CSharpNullable); break; } diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 0fb64ceec5c97..03214edc35e44 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -3106,6 +3106,19 @@ TEST_F(TokenAnnotatorTest, CSharpNullableTypes) { ASSERT_EQ(Tokens.size(), 4u) << Tokens; EXPECT_TOKEN(Tokens[1], tok::question, TT_CSharpNullable); + Tokens = annotate("{\n" + " int? a;\n" + " if (b is int?)\n" + " f();\n" + " var foo = A<Foo?>();\n" + "}", + Style); + ASSERT_EQ(Tokens.size(), 29u) << Tokens; + EXPECT_TOKEN(Tokens[2], tok::question, TT_CSharpNullable); + EXPECT_TOKEN(Tokens[10], tok::question, TT_CSharpNullable); + EXPECT_TOKEN(Tokens[20], tok::less, TT_TemplateOpener); + EXPECT_TOKEN(Tokens[22], tok::question, TT_CSharpNullable); + Tokens = annotate("cond? id : id2", Style); ASSERT_EQ(Tokens.size(), 6u) << Tokens; EXPECT_TOKEN(Tokens[1], tok::question, TT_ConditionalExpr); `````````` </details> https://github.com/llvm/llvm-project/pull/138631 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits