using System.Collections.Generic; namespace Parser.Internal { internal static class TokenFactory { public static SyntaxTrivia CreateTrivia(TokenKind kind, string text) { return new SyntaxTrivia(kind, text); } public static SyntaxToken CreateTokenWithTrivia( TokenKind kind, IReadOnlyList leadingTrivia, IReadOnlyList trailingTrivia) { var leading = leadingTrivia.Count > 0 ? SyntaxList.List(leadingTrivia) : null; var trailing = trailingTrivia.Count > 0 ? SyntaxList.List(trailingTrivia) : null; return new SyntaxToken.SyntaxTokenWithTrivia(kind, leading, trailing); } public static SyntaxToken CreateTokenWithTrivia( TokenKind kind, GreenNode? leadingTrivia, GreenNode? trailingTrivia) { return new SyntaxToken.SyntaxTokenWithTrivia(kind, leadingTrivia, trailingTrivia); } public static SyntaxToken CreateIdentifier( string text, IReadOnlyList leadingTrivia, IReadOnlyList trailingTrivia) { var leading = leadingTrivia.Count > 0 ? SyntaxList.List(leadingTrivia) : null; var trailing = trailingTrivia.Count > 0 ? SyntaxList.List(trailingTrivia) : null; return new SyntaxToken.SyntaxIdentifierWithTrivia(text, leading, trailing); } public static SyntaxToken CreateIdentifier( string text, GreenNode? leadingTrivia, GreenNode? trailingTrivia) { return new SyntaxToken.SyntaxIdentifierWithTrivia(text, leadingTrivia, trailingTrivia); } public static SyntaxToken CreateTokenWithValueAndTrivia( TokenKind kind, string text, T value, IReadOnlyList leadingTrivia, IReadOnlyList trailingTrivia) { var leading = leadingTrivia.Count > 0 ? SyntaxList.List(leadingTrivia) : null; var trailing = trailingTrivia.Count > 0 ? SyntaxList.List(trailingTrivia) : null; return new SyntaxToken.SyntaxTokenWithValueAndTrivia(kind, text, value, leading, trailing); } public static SyntaxToken CreateTokenWithValueAndTrivia( TokenKind kind, string text, T value, GreenNode? leadingTrivia, GreenNode? trailingTrivia) { return new SyntaxToken.SyntaxTokenWithValueAndTrivia(kind, text, value, leadingTrivia, trailingTrivia); } public static SyntaxToken CreateUnquotedStringLiteral( string text, string value, IReadOnlyList leadingTrivia, IReadOnlyList trailingTrivia) { var leading = leadingTrivia.Count > 0 ? SyntaxList.List(leadingTrivia) : null; var trailing = trailingTrivia.Count > 0 ? SyntaxList.List(trailingTrivia) : null; return new SyntaxToken.SyntaxTokenWithValueAndTrivia( TokenKind.UnquotedStringLiteralToken, text, value, leading, trailing); } public static SyntaxToken CreateUnquotedStringLiteral( string text, string value, GreenNode? leadingTrivia, GreenNode? trailingTrivia) { return new SyntaxToken.SyntaxTokenWithValueAndTrivia( TokenKind.UnquotedStringLiteralToken, text, value, leadingTrivia, trailingTrivia); } public static SyntaxToken CreateMissing( TokenKind kind, IReadOnlyList? leadingTrivia, IReadOnlyList? trailingTrivia) { var leading = (leadingTrivia is { } l && l.Count > 0) ? SyntaxList.List(leadingTrivia) : null; var trailing = (trailingTrivia is { } c && c.Count > 0) ? SyntaxList.List(trailingTrivia) : null; return new SyntaxToken.MissingTokenWithTrivia(kind, leading, trailing); } } }