diff options
| author | Paul Hoad <mydeveloperday@gmail.com> | 2019-10-04 08:10:22 +0000 |
|---|---|---|
| committer | Paul Hoad <mydeveloperday@gmail.com> | 2019-10-04 08:10:22 +0000 |
| commit | 4c056583548ab59e2ad24deb2ca30790a290a8e3 (patch) | |
| tree | 93a0c382c17489e0a62c0d47134c4d1850fac95a /clang/unittests/Format/FormatTestCSharp.cpp | |
| parent | 7588cf09da479a66f8ceba4bd78eba83787b16ac (diff) | |
| download | bcm5719-llvm-4c056583548ab59e2ad24deb2ca30790a290a8e3.tar.gz bcm5719-llvm-4c056583548ab59e2ad24deb2ca30790a290a8e3.zip | |
[clang-format] [PR43338] C# clang format has space issues betweern C# only keywords
Summary:
When formatting C# there can be issues with a lack of spaces between `using (` , `foreach (` and generic types
The C# code
```
public class Foo
{
Dictionary<string,string> foo;
}
```
will be formatted as
```
public class Foo
{
Dictionary<string, string>foo;
^^^^^ missing a space
}
```
This revision also reverts some of {D66662} in order to make this cleaner and resolve an issues seen by @owenpan that the formatting didn't add a space when not in a code block
This also transforms C# foreach commands to be seen as tok::kw_for commands (to ensure foreach gets the same Brace Wrapping behavior as for without littering the code with `if(Style.isCSharp())`
Reviewers: owenpan, klimek, russellmcc, mitchell-stellar
Reviewed By: mitchell-stellar
Subscribers: cfe-commits
Tags: #clang, #clang-format
Differential Revision: https://reviews.llvm.org/D67660
llvm-svn: 373709
Diffstat (limited to 'clang/unittests/Format/FormatTestCSharp.cpp')
| -rw-r--r-- | clang/unittests/Format/FormatTestCSharp.cpp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index 031de143389..a2f381078d4 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -147,15 +147,27 @@ TEST_F(FormatTestCSharp, CSharpFatArrows) { } TEST_F(FormatTestCSharp, CSharpNullConditional) { + FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); + Style.SpaceBeforeParens = FormatStyle::SBPO_Always; + verifyFormat( "public Person(string firstName, string lastName, int? age=null)"); - verifyFormat("switch(args?.Length)"); + verifyFormat("foo () {\n" + " switch (args?.Length) {}\n" + "}", + Style); + + verifyFormat("switch (args?.Length) {}", Style); verifyFormat("public static void Main(string[] args)\n" "{\n" " string dirPath = args?[0];\n" "}"); + + Style.SpaceBeforeParens = FormatStyle::SBPO_Never; + + verifyFormat("switch(args?.Length) {}", Style); } TEST_F(FormatTestCSharp, Attributes) { @@ -221,16 +233,22 @@ TEST_F(FormatTestCSharp, Attributes) { TEST_F(FormatTestCSharp, CSharpUsing) { FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); Style.SpaceBeforeParens = FormatStyle::SBPO_Always; - verifyFormat("public void foo() {\n" + verifyFormat("public void foo () {\n" " using (StreamWriter sw = new StreamWriter (filenameA)) {}\n" "}", Style); + verifyFormat("using (StreamWriter sw = new StreamWriter (filenameB)) {}", + Style); + Style.SpaceBeforeParens = FormatStyle::SBPO_Never; verifyFormat("public void foo() {\n" " using(StreamWriter sw = new StreamWriter(filenameB)) {}\n" "}", Style); + + verifyFormat("using(StreamWriter sw = new StreamWriter(filenameB)) {}", + Style); } TEST_F(FormatTestCSharp, CSharpRegions) { @@ -300,5 +318,40 @@ TEST_F(FormatTestCSharp, AttributesIndentation) { Style); } +TEST_F(FormatTestCSharp, CSharpSpaceBefore) { + FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); + Style.SpaceBeforeParens = FormatStyle::SBPO_Always; + + verifyFormat("List<string> list;", Style); + verifyFormat("Dictionary<string, string> dict;", Style); + + verifyFormat("for (int i = 0; i < size (); i++) {\n" + "}", + Style); + verifyFormat("foreach (var x in y) {\n" + "}", + Style); + verifyFormat("switch (x) {}", Style); + verifyFormat("do {\n" + "} while (x);", + Style); + + Style.SpaceBeforeParens = FormatStyle::SBPO_Never; + + verifyFormat("List<string> list;", Style); + verifyFormat("Dictionary<string, string> dict;", Style); + + verifyFormat("for(int i = 0; i < size(); i++) {\n" + "}", + Style); + verifyFormat("foreach(var x in y) {\n" + "}", + Style); + verifyFormat("switch(x) {}", Style); + verifyFormat("do {\n" + "} while(x);", + Style); +} + } // namespace format } // end namespace clang |

