public static (SyntaxTokenEnumerable tokens, LexingContext context) LexTokens( SourceText sourceText, LexingMode mode = LexingMode.Normal) { var lexer = new Lexer(sourceText); var context = new LexingContext(lexer); var enumerable = new SyntaxTokenEnumerable(lexer); return(enumerable, context); }
public void Lexer_Emits_Diagnostics( string text, DiagnosticId diagnosticId, int spanStart, int spanEnd, LexingMode lexingMode = LexingMode.Normal) { (SyntaxToken token, LexingContext ctx) = LexToken(text, lexingMode); var diagnostic = Assert.Single(ctx.Diagnostics.All); Assert.Equal(diagnosticId, diagnostic.Id); Assert.Equal(TextSpan.FromBounds(spanStart, spanEnd), diagnostic.Span); }
private static (SyntaxToken token, LexingContext ctx) LexToken(string text, LexingMode mode = LexingMode.Normal) { SyntaxToken tk = default; (SyntaxTokenEnumerable tokens, LexingContext ctx) = Parsing.LexTokens(text, mode); foreach (SyntaxToken token in tokens) { if (tk.Kind == SyntaxTokenKind.None) { tk = token; } else if (token.Kind != SyntaxTokenKind.EndOfFileToken) { Assert.True(false, "More than one token was lexed."); } } if (tk.Kind == SyntaxTokenKind.None) { Assert.True(false, "No tokens were lexed."); } return(tk, ctx); }