From 48f396205be7c65fd082222dff30d2402dd45e6a Mon Sep 17 00:00:00 2001 From: elachlan <2433737+elachlan@users.noreply.github.com> Date: Tue, 16 Aug 2022 23:21:42 +1000 Subject: [PATCH] Fix formatting issues around for loops --- .../FastSyntaxFactory.cs | 6 +- src/Microsoft.Windows.CsWin32/Generator.cs | 29 +++++++-- .../GeneratorTests.cs | 62 ++++++++++++------- 3 files changed, 71 insertions(+), 26 deletions(-) diff --git a/src/Microsoft.Windows.CsWin32/FastSyntaxFactory.cs b/src/Microsoft.Windows.CsWin32/FastSyntaxFactory.cs index e80fbb18..9ebb2055 100644 --- a/src/Microsoft.Windows.CsWin32/FastSyntaxFactory.cs +++ b/src/Microsoft.Windows.CsWin32/FastSyntaxFactory.cs @@ -79,7 +79,11 @@ internal static SyntaxToken Token(SyntaxKind kind) internal static BlockSyntax Block(params StatementSyntax[] statements) => SyntaxFactory.Block(OpenBrace, List(statements), CloseBrace); - internal static ForStatementSyntax ForStatement(VariableDeclarationSyntax? declaration, ExpressionSyntax condition, SeparatedSyntaxList incrementors, StatementSyntax statement) => SyntaxFactory.ForStatement(Token(SyntaxKind.ForKeyword), Token(SyntaxKind.OpenParenToken), declaration!, default, Token(SyntaxKind.SemicolonToken), condition, Token(SyntaxKind.SemicolonToken), incrementors, Token(SyntaxKind.CloseParenToken), statement); + internal static ForStatementSyntax ForStatement(VariableDeclarationSyntax? declaration, ExpressionSyntax condition, SeparatedSyntaxList incrementors, StatementSyntax statement) + { + SyntaxToken semicolonToken = SyntaxFactory.Token(TriviaList(), SyntaxKind.SemicolonToken, TriviaList(Space)); + return SyntaxFactory.ForStatement(Token(SyntaxKind.ForKeyword), Token(SyntaxKind.OpenParenToken), declaration!, default, semicolonToken, condition, semicolonToken, incrementors, Token(SyntaxKind.CloseParenToken), statement); + } internal static StatementSyntax EmptyStatement() => SyntaxFactory.EmptyStatement(Token(SyntaxKind.SemicolonToken)); diff --git a/src/Microsoft.Windows.CsWin32/Generator.cs b/src/Microsoft.Windows.CsWin32/Generator.cs index 478935f0..b7e4592a 100644 --- a/src/Microsoft.Windows.CsWin32/Generator.cs +++ b/src/Microsoft.Windows.CsWin32/Generator.cs @@ -5021,16 +5021,18 @@ private ParameterSyntax CreateParameter(TypeHandleInfo parameterInfo, Parameter VariableDeclaration(PointerType(elementType)).AddVariables( VariableDeclarator(Identifier("p0")).WithInitializer(EqualsValueClause( PrefixUnaryExpression(SyntaxKind.AddressOfExpression, IdentifierName("_0"))))), + Block().AddStatements( // for (int i = 0; i < length; i++) ForStatement( VariableDeclaration(PredefinedType(TokenWithSpace(SyntaxKind.IntKeyword))).AddVariables(VariableDeclarator(Identifier("i")).WithInitializer(EqualsValueClause(LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(0))))), BinaryExpression(SyntaxKind.LessThanExpression, IdentifierName("i"), lengthParameterName), SingletonSeparatedList(PostfixUnaryExpression(SyntaxKind.PostIncrementExpression, IdentifierName("i"))), + Block().AddStatements( // target[i] = p0[i]; ExpressionStatement(AssignmentExpression( SyntaxKind.SimpleAssignmentExpression, ElementAccessExpression(targetParameterName).AddArgumentListArguments(Argument(IdentifierName("i"))), - ElementAccessExpression(IdentifierName("p0")).AddArgumentListArguments(Argument(IdentifierName("i")))))))))); + ElementAccessExpression(IdentifierName("p0")).AddArgumentListArguments(Argument(IdentifierName("i")))))))))))); // internal readonly T[] ToArray(int length = 4) fixedLengthStruct = fixedLengthStruct.AddMembers( @@ -5078,27 +5080,31 @@ private ParameterSyntax CreateParameter(TypeHandleInfo parameterInfo, Parameter VariableDeclaration(PredefinedType(TokenWithSpace(SyntaxKind.IntKeyword))).AddVariables(VariableDeclarator(Identifier("i")).WithInitializer(EqualsValueClause(LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(0))))), BinaryExpression(SyntaxKind.LessThanExpression, IdentifierName("i"), commonLengthLocal), SingletonSeparatedList(PostfixUnaryExpression(SyntaxKind.PostIncrementExpression, IdentifierName("i"))), + Block().AddStatements( // if (p0[i] != value[i]) IfStatement( BinaryExpression( SyntaxKind.NotEqualsExpression, ElementAccessExpression(IdentifierName("p0")).AddArgumentListArguments(Argument(IdentifierName("i"))), ElementAccessExpression(valueParameterName).AddArgumentListArguments(Argument(IdentifierName("i")))), + Block().AddStatements( // return false; - ReturnStatement(LiteralExpression(SyntaxKind.FalseLiteralExpression)))), + ReturnStatement(LiteralExpression(SyntaxKind.FalseLiteralExpression)))))), // for (int i = commonLength; i < 4; i++) ForStatement( VariableDeclaration(PredefinedType(TokenWithSpace(SyntaxKind.IntKeyword))).AddVariables(VariableDeclarator(Identifier("i")).WithInitializer(EqualsValueClause(commonLengthLocal))), BinaryExpression(SyntaxKind.LessThanExpression, IdentifierName("i"), lengthLiteralSyntax), SingletonSeparatedList(PostfixUnaryExpression(SyntaxKind.PostIncrementExpression, IdentifierName("i"))), + Block().AddStatements( // if (p0[i] != default) IfStatement( BinaryExpression( SyntaxKind.NotEqualsExpression, ElementAccessExpression(IdentifierName("p0")).AddArgumentListArguments(Argument(IdentifierName("i"))), DefaultExpression(elementType)), + Block().AddStatements( // return false; - ReturnStatement(LiteralExpression(SyntaxKind.FalseLiteralExpression)))))), + ReturnStatement(LiteralExpression(SyntaxKind.FalseLiteralExpression)))))))), ReturnStatement(LiteralExpression(SyntaxKind.TrueLiteralExpression))))); } @@ -5299,10 +5305,11 @@ private ParameterSyntax CreateParameter(TypeHandleInfo parameterInfo, Parameter VariableDeclarator(i.Identifier).WithInitializer(EqualsValueClause(LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(0))))), BinaryExpression(SyntaxKind.LessThanExpression, i, MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, valueParam, IdentifierName(nameof(ReadOnlySpan.Length)))), SingletonSeparatedList(PostfixUnaryExpression(SyntaxKind.PostIncrementExpression, i)), + Block().AddStatements( ExpressionStatement(AssignmentExpression( SyntaxKind.SimpleAssignmentExpression, PrefixUnaryExpression(SyntaxKind.PointerIndirectionExpression, PostfixUnaryExpression(SyntaxKind.PostIncrementExpression, p)), - ElementAccessExpression(valueParam).AddArgumentListArguments(Argument(i))))), + ElementAccessExpression(valueParam).AddArgumentListArguments(Argument(i)))))), }; } @@ -6363,6 +6370,20 @@ internal WhitespaceRewriter() } } + public override SyntaxNode? VisitForStatement(ForStatementSyntax node) + { + node = this.WithIndentingTrivia(node); + if (node.Statement is BlockSyntax) + { + return base.VisitForStatement(node); + } + else + { + using var indent = new Indent(this); + return base.VisitForStatement(node); + } + } + public override SyntaxNode? VisitReturnStatement(ReturnStatementSyntax node) => base.VisitReturnStatement(node.WithLeadingTrivia(this.IndentTrivia)); public override SyntaxToken VisitToken(SyntaxToken token) diff --git a/test/Microsoft.Windows.CsWin32.Tests/GeneratorTests.cs b/test/Microsoft.Windows.CsWin32.Tests/GeneratorTests.cs index f1d40a96..5a9783b2 100644 --- a/test/Microsoft.Windows.CsWin32.Tests/GeneratorTests.cs +++ b/test/Microsoft.Windows.CsWin32.Tests/GeneratorTests.cs @@ -1243,9 +1243,7 @@ internal partial struct __char_32 {{ char* pLastExclusive = p + Length; char* pCh = p; -for(; -pCh < pLastExclusive && *pCh != '\0'; -pCh++); + for(; pCh < pLastExclusive && *pCh != '\0'; pCh++); length= checked((int)(pCh - p)); }} return ToString(length); @@ -1308,9 +1306,12 @@ internal partial struct __uint_4 {{ if (length > 4)throw new ArgumentOutOfRangeException(""length""); fixed (uint* p0 = &_0) -for(int i = 0; -i < length; -i++) target[i]= p0[i]; + {{ + for(int i = 0; i < length; i++) + {{ + target[i]= p0[i]; + }} + }} }} internal readonly uint[] ToArray(int length = 4) @@ -1326,12 +1327,20 @@ internal partial struct __uint_4 fixed (uint* p0 = &_0) {{ int commonLength = Math.Min(value.Length, 4); -for(int i = 0; -i < commonLength; -i++) if (p0[i] != value[i]) return false; -for(int i = commonLength; -i < 4; -i++) if (p0[i] != default(uint)) return false; + for(int i = 0; i < commonLength; i++) + {{ + if (p0[i] != value[i]) + {{ + return false; + }} + }} + for(int i = commonLength; i < 4; i++) + {{ + if (p0[i] != default(uint)) + {{ + return false; + }} + }} }} return true; }} @@ -1406,9 +1415,12 @@ internal partial struct __uint_4 {{ if (length > 4)throw new ArgumentOutOfRangeException(""length""); fixed (uint* p0 = &_0) -for(int i = 0; -i < length; -i++) target[i]= p0[i]; + {{ + for(int i = 0; i < length; i++) + {{ + target[i]= p0[i]; + }} + }} }} internal readonly uint[] ToArray(int length = 4) @@ -1424,12 +1436,20 @@ internal partial struct __uint_4 fixed (uint* p0 = &_0) {{ int commonLength = Math.Min(value.Length, 4); -for(int i = 0; -i < commonLength; -i++) if (p0[i] != value[i]) return false; -for(int i = commonLength; -i < 4; -i++) if (p0[i] != default(uint)) return false; + for(int i = 0; i < commonLength; i++) + {{ + if (p0[i] != value[i]) + {{ + return false; + }} + }} + for(int i = commonLength; i < 4; i++) + {{ + if (p0[i] != default(uint)) + {{ + return false; + }} + }} }} return true; }}