[clang-format] [PR43100] clang-format C# support does not add a space between "using" and paren

Summary:
Addresses https://bugs.llvm.org/show_bug.cgi?id=43100

Formatting using statement in C# with clang-format removes the space between using and paren even when SpaceBeforeParens is !

```
using(FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize : 1))
```

this change simply overcomes this for when using C# settings in the .clang-format file

```
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize : 1))
```

All FormatTests pass..

```
[==========] 688 tests from 21 test cases ran. (88508 ms total)
[  PASSED  ] 688 tests.
```

Reviewers: djasper, klimek, owenpan

Reviewed By: owenpan

Subscribers: llvm-commits, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D66662

llvm-svn: 371720
This commit is contained in:
Paul Hoad 2019-09-12 10:18:53 +00:00
parent 3867a2d510
commit 719087bbb7
2 changed files with 19 additions and 0 deletions

View File

@ -2611,6 +2611,10 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
return Style.Language == FormatStyle::LK_JavaScript || return Style.Language == FormatStyle::LK_JavaScript ||
!Left.TokenText.endswith("=*/"); !Left.TokenText.endswith("=*/");
if (Right.is(tok::l_paren)) { if (Right.is(tok::l_paren)) {
// using (FileStream fs...
if (Style.isCSharp() && Left.is(tok::kw_using) &&
Style.SpaceBeforeParens != FormatStyle::SBPO_Never)
return true;
if ((Left.is(tok::r_paren) && Left.is(TT_AttributeParen)) || if ((Left.is(tok::r_paren) && Left.is(TT_AttributeParen)) ||
(Left.is(tok::r_square) && Left.is(TT_AttributeSquare))) (Left.is(tok::r_square) && Left.is(TT_AttributeSquare)))
return true; return true;

View File

@ -165,6 +165,21 @@ TEST_F(FormatTestCSharp, Attributes) {
"public string Host {\n set;\n get;\n}"); "public string Host {\n set;\n get;\n}");
} }
TEST_F(FormatTestCSharp, CSharpUsing) {
FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp);
Style.SpaceBeforeParens = FormatStyle::SBPO_Always;
verifyFormat("public void foo() {\n"
" using (StreamWriter sw = new StreamWriter (filenameA)) {}\n"
"}",
Style);
Style.SpaceBeforeParens = FormatStyle::SBPO_Never;
verifyFormat("public void foo() {\n"
" using(StreamWriter sw = new StreamWriter(filenameB)) {}\n"
"}",
Style);
}
TEST_F(FormatTestCSharp, CSharpRegions) { TEST_F(FormatTestCSharp, CSharpRegions) {
verifyFormat("#region aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa " verifyFormat("#region aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa "
"aaaaaaaaaaaaaaa long region"); "aaaaaaaaaaaaaaa long region");