Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -2869,7 +2869,8 @@ // space between keywords and paren e.g. "using (" if (Right.is(tok::l_paren)) if (Left.is(tok::kw_using)) - return spaceRequiredBeforeParens(Left); + return Style.SpaceBeforeParens == FormatStyle::SBPO_ControlStatements || + spaceRequiredBeforeParens(Right); } else if (Style.Language == FormatStyle::LK_JavaScript) { if (Left.is(TT_JsFatArrow)) return true; Index: clang/unittests/Format/FormatTestCSharp.cpp =================================================================== --- clang/unittests/Format/FormatTestCSharp.cpp +++ clang/unittests/Format/FormatTestCSharp.cpp @@ -235,20 +235,46 @@ Style.SpaceBeforeParens = FormatStyle::SBPO_Always; verifyFormat("public void foo () {\n" " using (StreamWriter sw = new StreamWriter (filenameA)) {}\n" + " using () {}\n" "}", Style); + // Ensure clang-format affects top-level snippets correctly. 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" + " using() {}\n" "}", Style); + // Ensure clang-format affects top-level snippets correctly. verifyFormat("using(StreamWriter sw = new StreamWriter(filenameB)) {}", Style); + + Style.SpaceBeforeParens = FormatStyle::SBPO_ControlStatements; + verifyFormat("public void foo() {\n" + " using (StreamWriter sw = new StreamWriter(filenameA)) {}\n" + " using () {}\n" + "}", + Style); + + // Ensure clang-format affects top-level snippets correctly. + verifyFormat("using (StreamWriter sw = new StreamWriter(filenameB)) {}", + Style); + + Style.SpaceBeforeParens = FormatStyle::SBPO_NonEmptyParentheses; + verifyFormat("public void foo() {\n" + " using (StreamWriter sw = new StreamWriter (filenameA)) {}\n" + " using() {}\n" + "}", + Style); + + // Ensure clang-format affects top-level snippets correctly. + verifyFormat("using (StreamWriter sw = new StreamWriter (filenameB)) {}", + Style); } TEST_F(FormatTestCSharp, CSharpRegions) {