Skip to content

Commit

Permalink
Merge pull request #656 from elachlan/for-loop-formatting
Browse files Browse the repository at this point in the history
Fix formatting issues around for loops
  • Loading branch information
AArnott committed Aug 17, 2022
2 parents 86e370f + 48f3962 commit 7f1f395
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 26 deletions.
6 changes: 5 additions & 1 deletion src/Microsoft.Windows.CsWin32/FastSyntaxFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<ExpressionSyntax> 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<ExpressionSyntax> 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));

Expand Down
29 changes: 25 additions & 4 deletions src/Microsoft.Windows.CsWin32/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<ExpressionSyntax>(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(
Expand Down Expand Up @@ -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<ExpressionSyntax>(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<ExpressionSyntax>(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)))));
}

Expand Down Expand Up @@ -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<char>.Length)))),
SingletonSeparatedList<ExpressionSyntax>(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)))))),
};
}

Expand Down Expand Up @@ -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)
Expand Down
62 changes: 41 additions & 21 deletions test/Microsoft.Windows.CsWin32.Tests/GeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand All @@ -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;
}}
Expand Down Expand Up @@ -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)
Expand All @@ -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;
}}
Expand Down

0 comments on commit 7f1f395

Please sign in to comment.