private static SyntaxNode Transform(SyntaxNode oldNode, SyntaxNode newNode, Scope scope, LexicalExtension <SyntaxToken> extension) { Debug.Assert(newNode is BlockSyntax); var isAssignment = oldNode is LocalDeclarationStatementSyntax; if (!isAssignment && oldNode is BinaryExpressionSyntax) { var expr = oldNode as BinaryExpressionSyntax; isAssignment = expr.Kind() == SyntaxKind.SimpleAssignmentExpression; } if (isAssignment) { scope.AddError("r01", "R does not return", oldNode); return(newNode); } var document = scope.GetDocument <SyntaxToken, SyntaxNode, SemanticModel>(); document.change(oldNode.Parent, RoslynCompiler.ExplodeBlock(newNode)); return(newNode); }