From 015bca3e67cbb88f74f01fb5ae4e46392bec6416 Mon Sep 17 00:00:00 2001 From: Jonathan Coe Date: Tue, 28 Apr 2020 17:35:33 +0100 Subject: [PATCH] [clang-format] C# property formatting can be controlled by config options Summary: Allow brace wrapping in C# property accessors to be controlled by configuration options. Add new tests and revert old test results for MS style to their old state (as intended). `FormatStyle.BraceWrapping.AfterFunction = true;` will change automatic property formatting from ``` Type MyType { get; set } ``` to ``` Type MyType { get; set } ``` Reviewers: krasimir, MyDeveloperDay Subscribers: cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D79000 --- clang/lib/Format/UnwrappedLineParser.cpp | 2 ++ clang/unittests/Format/FormatTestCSharp.cpp | 32 +++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 4734ff1..e9e56e8 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1531,6 +1531,8 @@ bool UnwrappedLineParser::tryToParsePropertyAccessor() { // Try to parse the property accessor: // https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties Tokens->setPosition(StoredPosition); + if (Style.BraceWrapping.AfterFunction == true) + addUnwrappedLine(); nextToken(); do { switch (FormatTok->Tok.getKind()) { diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index 91962ef..550f5b4 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -245,11 +245,13 @@ TEST_F(FormatTestCSharp, Attributes) { "}"); verifyFormat("[TestMethod]\n" - "public string Host { set; get; }"); + "public string Host\n" + "{ set; get; }"); verifyFormat("[TestMethod(\"start\", HelpText = \"Starts the server " "listening on provided host\")]\n" - "public string Host { set; get; }"); + "public string Host\n" + "{ set; get; }"); verifyFormat( "[DllImport(\"Hello\", EntryPoint = \"hello_world\")]\n" @@ -671,6 +673,32 @@ class MyClass { DefaultThirdArgument); })", Style); + + // Brace wrapping and single-lining of accessor can be controlled by config. + Style.AllowShortBlocksOnASingleLine = FormatStyle::SBS_Never; + Style.BreakBeforeBraces = FormatStyle::BS_Custom; + Style.BraceWrapping.AfterFunction = true; + + verifyFormat(R"(// +public class SaleItem { + public decimal Price + { get; set; } +})", + Style); + + verifyFormat(R"(// +class TimePeriod { + public double Hours + { + get { + return _seconds / 3600; + } + set { + _seconds = value * 3600; + } + } +})", + Style); } TEST_F(FormatTestCSharp, CSharpSpaces) { -- 2.7.4