Author: Krasimir Georgiev Date: 2020-01-23T13:19:55+01:00 New Revision: 1e0174a93cfd364bffd12abc8f0148509d0d0f75
URL: https://github.com/llvm/llvm-project/commit/1e0174a93cfd364bffd12abc8f0148509d0d0f75 DIFF: https://github.com/llvm/llvm-project/commit/1e0174a93cfd364bffd12abc8f0148509d0d0f75.diff LOG: Treat C# `using` as a control statement Contributed by jbcoe! Summary: Unless SpaceBeforeParensOptions is set to SBPO_Never, a space will be put between `using` and `(` in C# code. Reviewers: klimek, MyDeveloperDay, krasimir Reviewed By: krasimir Subscribers: MyDeveloperDay, cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D72144 Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTestCSharp.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 7dbde9a8d6a8..05b1db2a878d 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2869,7 +2869,8 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, // 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; diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index 95b14d0f0aa4..90d05ad679a7 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -235,20 +235,46 @@ TEST_F(FormatTestCSharp, CSharpUsing) { 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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits