public override SyntaxNode VisitExpressionStatement(ExpressionStatementSyntax node)
{
SyntaxNode updatedNode = base.VisitExpressionStatement(node);
if (node.Expression.Kind == SyntaxKind.AddAssignExpression ||
node.Expression.Kind == SyntaxKind.SubtractAssignExpression ||
node.Expression.Kind == SyntaxKind.MultiplyAssignExpression ||
node.Expression.Kind == SyntaxKind.DivideAssignExpression)
{
// Print value of the variable on the 'Left' side of
// compound assignement statements encountered.
var compoundAssignmentExpression = (BinaryExpressionSyntax)node.Expression;
StatementSyntax consoleWriteLineStatement =
Syntax.ParseStatement(string.Format("System.Console.WriteLine({0});", compoundAssignmentExpression.Left.ToString()));
updatedNode =
Syntax.Block(Syntax.List<StatementSyntax>(
node.WithLeadingTrivia().WithTrailingTrivia(), // Remove leading and trailing trivia.
consoleWriteLineStatement))
.WithLeadingTrivia(node.GetLeadingTrivia()) // Attach leading trivia from original node.
.WithTrailingTrivia(node.GetTrailingTrivia()); // Attach trailing trivia from original node.
}
return updatedNode;
}