private SeparatedSyntaxList <SelectColumnSyntax> ParseSelectColumnList() { var columnsWithCommas = new List <SyntaxNodeOrToken>(); while (true) { var oldIndex = _tokenIndex; var selectColumn = ParseSelectColumn(); columnsWithCommas.Add(selectColumn); if (_tokenIndex == oldIndex) { SkipTokens(t => SyntaxFacts.CanFollowSelectColumn(t.Kind)); } if (Current.Kind != SyntaxKind.CommaToken && !SyntaxFacts.CanStartExpression(Current.Kind)) { break; } var comma = Match(SyntaxKind.CommaToken); columnsWithCommas.Add(comma); } return(new SeparatedSyntaxList <SelectColumnSyntax>(columnsWithCommas)); }
private SeparatedSyntaxList <ExpressionSyntax> ParseArgumentExpressionList(int minimumNumberOfArguments) { if (Current.Kind == SyntaxKind.RightParenthesisToken && minimumNumberOfArguments == 0) { return(SeparatedSyntaxList <ExpressionSyntax> .Empty); } var expressionsWithCommas = new List <SyntaxNodeOrToken>(); var minimumNumberOfItems = minimumNumberOfArguments * 2 - 1; while (true) { var oldIndex = _tokenIndex; var argument = ParseExpression(); expressionsWithCommas.Add(argument); if (_tokenIndex == oldIndex) { SkipTokens(t => SyntaxFacts.CanFollowArgument(t.Kind)); } var missingComma = Current.Kind != SyntaxKind.CommaToken; var enoughParameters = minimumNumberOfItems <= expressionsWithCommas.Count; var canStartExpression = SyntaxFacts.CanStartExpression(Current.Kind); if (missingComma && enoughParameters && !canStartExpression) { break; } var comma = Match(SyntaxKind.CommaToken); expressionsWithCommas.Add(comma); } return(new SeparatedSyntaxList <ExpressionSyntax>(expressionsWithCommas)); }