jbcoe updated this revision to Diff 248232. jbcoe marked an inline comment as done. jbcoe added a comment.
Remove duplicate check following review comment. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D75606/new/ https://reviews.llvm.org/D75606 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTestCSharp.cpp Index: clang/unittests/Format/FormatTestCSharp.cpp =================================================================== --- clang/unittests/Format/FormatTestCSharp.cpp +++ clang/unittests/Format/FormatTestCSharp.cpp @@ -631,7 +631,17 @@ FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); Style.SpacesInSquareBrackets = false; + verifyFormat(R"(// +public class A { + void foo() { int? value = some.bar(); } +})", + Style); // int? is nullable not a conditional expression. + + verifyFormat(R"(void foo(int? x, int? y, int? z) {})", + Style); // Nullables in function definitions. + verifyFormat(R"(public float? Value;)", Style); // no space before `?`. + verifyFormat(R"(int?[] arr = new int?[10];)", Style); // An array of a nullable type. } Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -1011,7 +1011,12 @@ Style.Language == FormatStyle::LK_JavaScript) break; if (Style.isCSharp()) { - if (Line.MustBeDeclaration && !Contexts.back().IsExpression) { + // `Type? name;` and `Type? name =` can only be nullable types. + // Line.MustBeDeclaration will be true for `Type? name;`. + if (!Contexts.back().IsExpression && + (Line.MustBeDeclaration || + (Tok->Next && Tok->Next->is(tok::identifier) && Tok->Next->Next && + Tok->Next->Next->is(tok::equal)))) { Tok->Type = TT_CSharpNullable; break; }
Index: clang/unittests/Format/FormatTestCSharp.cpp =================================================================== --- clang/unittests/Format/FormatTestCSharp.cpp +++ clang/unittests/Format/FormatTestCSharp.cpp @@ -631,7 +631,17 @@ FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); Style.SpacesInSquareBrackets = false; + verifyFormat(R"(// +public class A { + void foo() { int? value = some.bar(); } +})", + Style); // int? is nullable not a conditional expression. + + verifyFormat(R"(void foo(int? x, int? y, int? z) {})", + Style); // Nullables in function definitions. + verifyFormat(R"(public float? Value;)", Style); // no space before `?`. + verifyFormat(R"(int?[] arr = new int?[10];)", Style); // An array of a nullable type. } Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -1011,7 +1011,12 @@ Style.Language == FormatStyle::LK_JavaScript) break; if (Style.isCSharp()) { - if (Line.MustBeDeclaration && !Contexts.back().IsExpression) { + // `Type? name;` and `Type? name =` can only be nullable types. + // Line.MustBeDeclaration will be true for `Type? name;`. + if (!Contexts.back().IsExpression && + (Line.MustBeDeclaration || + (Tok->Next && Tok->Next->is(tok::identifier) && Tok->Next->Next && + Tok->Next->Next->is(tok::equal)))) { Tok->Type = TT_CSharpNullable; break; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits