using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using System.Collections.Generic; using System.Linq; using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; namespace SyntaxGenerator { public static class SyntaxExtensions { public static ArgumentListSyntax SingleArgument(ExpressionSyntax expression) { return ArgumentList( SingletonSeparatedList( Argument(expression))); } public static ArgumentListSyntax SeveralArguments(IEnumerable expressions) { return ArgumentList( IntersperseWithCommas( expressions.Select(e => Argument(e)))); } public static ArgumentListSyntax SeveralArguments(params ExpressionSyntax[] expressions) { return SeveralArguments((IEnumerable)expressions); } public static IEnumerable IntersperseWithCommas(IEnumerable tokens) { var first = true; foreach (var token in tokens) { if (first) { yield return token; first = false; } else { yield return Token(SyntaxKind.CommaToken); yield return token; } } } public static SeparatedSyntaxList IntersperseWithCommas(IEnumerable tokens) where TNode : SyntaxNode { return SeparatedList( IntersperseWithCommas(tokens.Select(token => (SyntaxNodeOrToken)token))); } public static SeparatedSyntaxList IntersperseWithCommas(params TNode[] tokens) where TNode : SyntaxNode { return IntersperseWithCommas((IEnumerable)tokens); } } }