diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 28e21f93c14c4..8b00b1c141774 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -3917,6 +3917,8 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, } } } + if (Style.isCSharp() && Left.is(Keywords.kw_is) && Right.is(tok::l_square)) + return true; const auto SpaceRequiredForArrayInitializerLSquare = [](const FormatToken &LSquareTok, const FormatStyle &Style) { return Style.SpacesInContainerLiterals || diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index 1928a0d2da632..9f912624d1658 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -1176,6 +1176,14 @@ foreach ((A a, B b) in someList) { verifyFormat(R"(override (string name, int age) methodTuple() {})", Style); verifyFormat(R"(async (string name, int age) methodTuple() {})", Style); verifyFormat(R"(unsafe (string name, int age) methodTuple() {})", Style); + + Style.SpacesInSquareBrackets = false; + Style.SpaceBeforeSquareBrackets = true; + verifyFormat("return a is [1, 2, 3];", Style); + verifyFormat("return a is [..];", Style); + Style.SpaceBeforeSquareBrackets = false; + verifyFormat("return a is [1, 2, 3];", Style); + verifyFormat("return a is [..];", Style); } TEST_F(FormatTestCSharp, CSharpNullableTypes) {