Skip to content

Commit a02b448

Browse files
committed
improving icon enum generation
1 parent c411112 commit a02b448

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

mdresgen/IconThing.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,42 @@ private void UpdateEnum(string sourceFile)
6161
var enumDeclarationSyntaxNode = namespaceDeclarationNode.ChildNodes().OfType<EnumDeclarationSyntax>().Single();
6262

6363
var emptyEnumDeclarationSyntaxNode = enumDeclarationSyntaxNode.RemoveNodes(enumDeclarationSyntaxNode.ChildNodes().OfType<EnumMemberDeclarationSyntax>(), SyntaxRemoveOptions.KeepDirectives);
64+
65+
var leadingTriviaList = SyntaxTriviaList.Create(SyntaxFactory.Whitespace(" "));
6466
var generatedEnumDeclarationSyntax = emptyEnumDeclarationSyntaxNode.AddMembers(
65-
SyntaxFactory.EnumMemberDeclaration("Aston"),
66-
SyntaxFactory.EnumMemberDeclaration("Villa"));
67+
SyntaxFactory.EnumMemberDeclaration(SyntaxFactory.Identifier(leadingTriviaList, "Aston", SyntaxTriviaList.Empty)),
68+
SyntaxFactory.EnumMemberDeclaration(SyntaxFactory.Identifier(leadingTriviaList, "Villa", SyntaxTriviaList.Empty)));
6769

70+
generatedEnumDeclarationSyntax = AddLineFeedsToCommas(generatedEnumDeclarationSyntax);
71+
6872
var generatedNamespaceDeclarationSyntaxNode = namespaceDeclarationNode.ReplaceNode(enumDeclarationSyntaxNode, generatedEnumDeclarationSyntax);
6973
var generatedRootNode = rootNode.ReplaceNode(namespaceDeclarationNode, generatedNamespaceDeclarationSyntaxNode);
74+
75+
Console.WriteLine(generatedRootNode.ToFullString());
76+
}
7077

71-
//TODO checkout http://roslyn.codeplex.com/wikipage?title=Syntax%20Visualizer&referringTitle=Home for Roslyn SDK
78+
private static EnumDeclarationSyntax AddLineFeedsToCommas(EnumDeclarationSyntax enumDeclarationSyntax)
79+
{
80+
var none = new SyntaxToken();
81+
var trailingTriviaList = SyntaxTriviaList.Create(SyntaxFactory.ElasticCarriageReturnLineFeed);
7282

73-
Console.WriteLine(generatedRootNode.ToFullString());
74-
}
83+
Func<EnumDeclarationSyntax, SyntaxToken> next = enumSyntax => enumSyntax.ChildNodesAndTokens()
84+
.Where(nodeOrToken => nodeOrToken.IsToken)
85+
.Select(nodeOrToken => nodeOrToken.AsToken())
86+
.FirstOrDefault(
87+
token =>
88+
token.Value.Equals(",") &&
89+
(!token.HasTrailingTrivia || !token.TrailingTrivia.Any(SyntaxKind.EndOfLineTrivia)));
90+
91+
SyntaxToken current;
92+
while ((current = next(enumDeclarationSyntax)) != none)
93+
{
94+
enumDeclarationSyntax = enumDeclarationSyntax.ReplaceToken(current,
95+
SyntaxFactory.Identifier(SyntaxTriviaList.Empty, ",", trailingTriviaList)
96+
);
97+
}
98+
99+
return enumDeclarationSyntax;
100+
}
75101
}
76102
}

mdresgen/IconType.template.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ public enum IconType
1616
AutoGenerated,
1717
DoNotAmend
1818
}
19-
}
19+
}

0 commit comments

Comments
 (0)