private SyntaxToken LexSyntaxToken()
{
// Keep reading leading trivia until there is no more trivia.
// This is because we might be moving to new include files, each with leading trivia.
ImmutableArray<SyntaxNode> leadingTrivia = ImmutableArray<SyntaxNode>.Empty;
_diagnostics.Clear();
while (true)
{
_leadingTrivia.Clear();
_start = _charReader.Position;
ReadTrivia(_leadingTrivia, isTrailing: false);
var newLeadingTrivia = _leadingTrivia.ToImmutableArray();
if (newLeadingTrivia.IsEmpty)
break;
leadingTrivia = leadingTrivia.AddRange(newLeadingTrivia);
}
_kind = SyntaxKind.BadToken;
_contextualKind = SyntaxKind.None;
_value = null;
_diagnostics.Clear();
_start = _charReader.Position;
ReadToken();
var end = _charReader.Position;
var kind = _kind;
var span = TextSpan.FromBounds(Text, _start, end);
var text = Text.GetText(span);
var diagnostics = _diagnostics.ToImmutableArray();
_trailingTrivia.Clear();
_diagnostics.Clear();
_start = _charReader.Position;
ReadTrivia(_trailingTrivia, isTrailing: true);
var trailingTrivia = _trailingTrivia.ToImmutableArray();
return new SyntaxToken(kind, _contextualKind, false, MakeAbsolute(span), span, text, _value, leadingTrivia, trailingTrivia, diagnostics, null, false);
}