From 07c1978b15b4e9daefbf358e6fd185b5aa269f98 Mon Sep 17 00:00:00 2001 From: Jonathan Coe Date: Thu, 16 Apr 2020 14:20:51 +0100 Subject: [PATCH] [clang-format] Do not interpret C# deconstruction in a foreach as a cast Reviewers: krasimir Reviewed By: krasimir Subscribers: cfe-commits, MyDeveloperDay Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D78295 --- clang/lib/Format/TokenAnnotator.cpp | 4 ++++ clang/unittests/Format/FormatTestCSharp.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 8204623..6532f81 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1775,6 +1775,10 @@ private: if (Tok.Next->is(tok::question)) return false; + // `foreach((A a, B b) in someList)` should not be seen as a cast. + if (Tok.Next->is(Keywords.kw_in) && Style.isCSharp()) + return false; + // Functions which end with decorations like volatile, noexcept are unlikely // to be casts. if (Tok.Next->isOneOf(tok::kw_noexcept, tok::kw_volatile, tok::kw_const, diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index b0e4e76..67571d3 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -624,6 +624,7 @@ TEST_F(FormatTestCSharp, CSharpSpaces) { Style.SpaceBeforeCpp11BracedList = true; Style.Cpp11BracedListStyle = false; Style.SpacesInContainerLiterals = false; + Style.SpaceAfterCStyleCast = false; verifyFormat(R"(new Car { "Door", 0.1 })", Style); verifyFormat(R"(new Car { 0.1, "Door" })", Style); @@ -642,6 +643,12 @@ TEST_F(FormatTestCSharp, CSharpSpaces) { verifyFormat(R"(char[,,] rawCharArray = MakeCharacterGrid();)", Style); + // Not seen as a C-style cast. + verifyFormat(R"(// +foreach ((A a, B b) in someList) { +})", + Style); + Style.SpacesInSquareBrackets = true; verifyFormat(R"(private float[ , ] Values;)", Style); verifyFormat(R"(string dirPath = args?[ 0 ];)", Style); -- 2.7.4