jbcoe created this revision. jbcoe added a reviewer: krasimir. jbcoe added a project: clang-format. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Keep track of unpaired [] when identifying C# attribute lines Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D75455 Files: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTestCSharp.cpp Index: clang/unittests/Format/FormatTestCSharp.cpp =================================================================== --- clang/unittests/Format/FormatTestCSharp.cpp +++ clang/unittests/Format/FormatTestCSharp.cpp @@ -273,6 +273,15 @@ "{\n" "}"); + // [] in an attribute do not cause premature line wrapping or indenting. + verifyFormat(R"(// +public class A +{ + [SomeAttribute(new[] { RED, GREEN, BLUE }, -1.0f, 1.0f)] + [DoNotSerialize] + public Data MemberVariable; +})"); + // Unwrappable lines go on a line of their own. // 'target:' is not treated as a label. // Modify Style to enforce a column limit. Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -324,12 +324,21 @@ } void UnwrappedLineParser::parseCSharpAttribute() { + int UnpairedSquareBrackets = 1; do { switch (FormatTok->Tok.getKind()) { case tok::r_square: nextToken(); - addUnwrappedLine(); - return; + --UnpairedSquareBrackets; + if (UnpairedSquareBrackets == 0) { + addUnwrappedLine(); + return; + } + break; + case tok::l_square: + ++UnpairedSquareBrackets; + nextToken(); + break; default: nextToken(); break;
Index: clang/unittests/Format/FormatTestCSharp.cpp =================================================================== --- clang/unittests/Format/FormatTestCSharp.cpp +++ clang/unittests/Format/FormatTestCSharp.cpp @@ -273,6 +273,15 @@ "{\n" "}"); + // [] in an attribute do not cause premature line wrapping or indenting. + verifyFormat(R"(// +public class A +{ + [SomeAttribute(new[] { RED, GREEN, BLUE }, -1.0f, 1.0f)] + [DoNotSerialize] + public Data MemberVariable; +})"); + // Unwrappable lines go on a line of their own. // 'target:' is not treated as a label. // Modify Style to enforce a column limit. Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -324,12 +324,21 @@ } void UnwrappedLineParser::parseCSharpAttribute() { + int UnpairedSquareBrackets = 1; do { switch (FormatTok->Tok.getKind()) { case tok::r_square: nextToken(); - addUnwrappedLine(); - return; + --UnpairedSquareBrackets; + if (UnpairedSquareBrackets == 0) { + addUnwrappedLine(); + return; + } + break; + case tok::l_square: + ++UnpairedSquareBrackets; + nextToken(); + break; default: nextToken(); break;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits