private static void HandleQueryClause(QueryClauseSyntax queryClause, List <SyntaxToken> tokensToCheck) { switch (queryClause.Kind()) { case SyntaxKind.FromClause: var fromClause = (FromClauseSyntax)queryClause; tokensToCheck.Add(fromClause.FromKeyword); break; case SyntaxKind.LetClause: var letClause = (LetClauseSyntax)queryClause; tokensToCheck.Add(letClause.LetKeyword); break; case SyntaxKind.WhereClause: var whereClause = (WhereClauseSyntax)queryClause; tokensToCheck.Add(whereClause.WhereKeyword); break; case SyntaxKind.JoinClause: case SyntaxKind.JoinIntoClause: var joinClause = (JoinClauseSyntax)queryClause; tokensToCheck.Add(joinClause.JoinKeyword); break; case SyntaxKind.OrderByClause: var orderByClause = (OrderByClauseSyntax)queryClause; tokensToCheck.Add(orderByClause.OrderByKeyword); break; } }
private static int GetComplexityForClause([NotNull] QueryClauseSyntax bodyClause) { if (bodyClause is OrderByClauseSyntax orderByClause) { return(orderByClause.Orderings.Count); } return(bodyClause is LetClauseSyntax _ ? 2 : 1); }
private bool ReplacementBreaksQueryClause(QueryClauseSyntax originalClause, QueryClauseSyntax newClause) { // Ensure QueryClauseInfos are compatible. QueryClauseInfo originalClauseInfo = this.OriginalSemanticModel.GetQueryClauseInfo(originalClause, this.CancellationToken); QueryClauseInfo newClauseInfo = this.SpeculativeSemanticModel.GetQueryClauseInfo(newClause, this.CancellationToken); return(!SymbolInfosAreCompatible(originalClauseInfo.CastInfo, newClauseInfo.CastInfo) || !SymbolInfosAreCompatible(originalClauseInfo.OperationInfo, newClauseInfo.OperationInfo)); }
private static bool TryRewriteBodyClause(QueryClauseSyntax clause, YieldStatementSyntax dummyYield, ref BlockSyntax body) { if (clause is WhereClauseSyntax whereClauseSyntax) { body = body.InsertNodesBefore(FindDummyYieldIn(body), new[] { IfStatement( BinaryExpression(SyntaxKind.EqualsExpression, MaybeParenthesizedExpression(whereClauseSyntax.Condition), LiteralExpression(SyntaxKind.FalseLiteralExpression)), ContinueStatement()) }); return(true); } if (clause is LetClauseSyntax letClauseSyntax) { body = body.InsertNodesBefore(FindDummyYieldIn(body), new[] { LocalDeclarationStatement( VariableDeclaration(IdentifierName("var"), SingletonSeparatedList(VariableDeclarator( letClauseSyntax.Identifier) .WithInitializer( EqualsValueClause(letClauseSyntax.Expression) ) ) ) ) }); return(true); } if (clause is FromClauseSyntax fromClauseSyntax) { var nestedStmt = ForEachStatement( IdentifierName("var"), fromClauseSyntax.Identifier, fromClauseSyntax.Expression, Block().AddStatements(dummyYield)); body = body.ReplaceNode(FindDummyYieldIn(body), nestedStmt); return(true); } return(false); }
private QueryClause VisitContinuationClause(QueryClauseSyntax clause) { switch (clause) { case FromClauseSyntax from: return(Expressive.From(null, from.Expression.Accept(this))); case LetClauseSyntax let: return(Expressive.Let(null, let.Expression.Accept(this))); case JoinClauseSyntax join: return(Expressive.Join(null, join.InExpression.Accept(this), join.LeftExpression.Accept(this), join.RightExpression.Accept(this))); case WhereClauseSyntax where: return(Expressive.Where(where.Condition.Accept(this))); case OrderByClauseSyntax orderby: return(Expressive.OrderBy(Utils.Select(@orderby.Orderings, x => Expressive.Ordering(x.Expression.Accept(this), x.AscendingOrDescendingKeyword.Text == "ascending")))); default: throw new ArgumentException("Invalid clause."); } }
public IRangeVariableSymbol?ToSymbol(QueryClauseSyntax node) => Model.GetDeclaredSymbol(node, CancellationToken);
public override QueryClauseInfo GetQueryClauseInfo(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken)) { var bound = GetBoundQueryClause(node); return GetQueryClauseInfo(bound); }
public override IRangeVariableSymbol GetDeclaredSymbol(QueryClauseSyntax queryClause, CancellationToken cancellationToken = default(CancellationToken)) { var bound = GetBoundQueryClause(queryClause); return bound == null ? null : bound.DefinedSymbol; }
/// <summary> /// Gets the semantic information associated with a query clause. /// </summary> public abstract QueryClauseInfo GetQueryClauseInfo(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken));
public abstract IRangeVariableSymbol GetDeclaredSymbol(QueryClauseSyntax queryClause, CancellationToken cancellationToken = default(CancellationToken));
private static void HandleQueryClause(QueryClauseSyntax queryClause, List<SyntaxToken> tokensToCheck) { switch (queryClause.Kind()) { case SyntaxKind.FromClause: var fromClause = (FromClauseSyntax)queryClause; tokensToCheck.Add(fromClause.FromKeyword); break; case SyntaxKind.LetClause: var letClause = (LetClauseSyntax)queryClause; tokensToCheck.Add(letClause.LetKeyword); break; case SyntaxKind.WhereClause: var whereClause = (WhereClauseSyntax)queryClause; tokensToCheck.Add(whereClause.WhereKeyword); break; case SyntaxKind.JoinClause: case SyntaxKind.JoinIntoClause: var joinClause = (JoinClauseSyntax)queryClause; tokensToCheck.Add(joinClause.JoinKeyword); break; case SyntaxKind.OrderByClause: var orderByClause = (OrderByClauseSyntax)queryClause; tokensToCheck.Add(orderByClause.OrderByKeyword); break; } }
public override IRangeVariableSymbol GetDeclaredSymbol(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken)) { using (Logger.LogBlock(FunctionId.CSharp_SemanticModel_GetDeclaredSymbol, message: this.SyntaxTree.FilePath, cancellationToken: cancellationToken)) { CheckSyntaxNode(node); var model = this.GetMemberModel(node); return (model == null) ? null : model.GetDeclaredSymbol(node, cancellationToken); } }
public override QueryClauseInfo GetQueryClauseInfo(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken)) { using (Logger.LogBlock(FunctionId.CSharp_SemanticModel_GetQueryClauseInfo, message: this.SyntaxTree.FilePath, cancellationToken: cancellationToken)) { CheckSyntaxNode(node); var model = this.GetMemberModel(node); return (model == null) ? default(QueryClauseInfo) : model.GetQueryClauseInfo(node, cancellationToken); } }
public static IInternalQueryExpression ToInternalQueryExpression(this QueryClauseSyntax syntax) { return(null); }
public override QueryClauseInfo GetQueryClauseInfo(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken)) { CheckSyntaxNode(node); var model = this.GetMemberModel(node); return (model == null) ? default(QueryClauseInfo) : model.GetQueryClauseInfo(node, cancellationToken); }
public override IRangeVariableSymbol GetDeclaredSymbol(QueryClauseSyntax node, CancellationToken cancellationToken = default(CancellationToken)) { CheckSyntaxNode(node); var model = this.GetMemberModel(node); return (model == null) ? null : model.GetDeclaredSymbol(node, cancellationToken); }
public TameQueryClauseSyntax(QueryClauseSyntax node) { Node = node; AddChildren(); }