Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }