public static IEnumerable<ReplaceAction> GetSimplifications(LocalDeclarationStatementSyntax declaration, ISemanticModel model, Assumptions assume, CancellationToken cancellationToken = default(CancellationToken)) { var scope = declaration.Ancestors().OfType<BlockSyntax>().First(); var i = scope.Statements.IndexOf(declaration); foreach (var v in declaration.Declaration.Variables) { if (v.Initializer != null) { if (v.Initializer.Value.HasSideEffects(model, assume) != false) continue; var anyEffects = declaration.Declaration.Variables.Where(e => e.Initializer != null && e.Initializer.Value.HasSideEffects(model, assume) != false).Any(); if (v.Initializer.Value.IsConst(model) != true && anyEffects) continue; } var r = WithDeclarationMoved(scope, declaration, v, model, assume, cancellationToken); if (r == null) continue; var reducedDeclaration = declaration.Declaration.Variables.Count == 1 ? new LocalDeclarationStatementSyntax[0] : new[] { declaration.WithDeclaration(declaration.Declaration.WithVariables(declaration.Declaration.Variables.Without(v))) }; var newScopeWithReducedDeclaration = r.WithStatements(r.Statements.TakeSkipPutTake(i, 1, reducedDeclaration).List()); yield return new ReplaceAction("Reduce scope", scope, newScopeWithReducedDeclaration, v.Identifier.Span); } }