public override void VisitIfElseStatement(IfElseStatement ifElseStatement) { base.VisitIfElseStatement(ifElseStatement); Expression rightSide; var leftSide = ConvertIfStatementToNullCoalescingExpressionAction.CheckNode(ifElseStatement, out rightSide); if (leftSide == null) { return; } if (ConvertIfStatementToConditionalTernaryExpressionIssue.IsComplexExpression(leftSide) || ConvertIfStatementToConditionalTernaryExpressionIssue.IsComplexExpression(rightSide)) { return; } var previousNode = ifElseStatement.GetPrevSibling(sibling => sibling is Statement) as VariableDeclarationStatement; if (previousNode == null || ConvertIfStatementToConditionalTernaryExpressionIssue.IsComplexExpression(previousNode)) { return; } AddIssue( ifElseStatement.IfToken, ctx.TranslateString("Convert to '??' expresssion")); }
public override void VisitIfElseStatement(IfElseStatement ifElseStatement) { base.VisitIfElseStatement(ifElseStatement); var match = ifPattern.Match(ifElseStatement); if (match.Success) { var varDeclaration = ifElseStatement.GetPrevSibling(s => s.Role == BlockStatement.StatementRole) as VariableDeclarationStatement; var target = match.Get <Expression>("target").Single(); var match2 = varDelarationPattern.Match(varDeclaration); if (match2.Success) { if (varDeclaration == null || target == null) { return; } var initializer = varDeclaration.Variables.FirstOrDefault(); if (initializer == null || !(target is IdentifierExpression) || ((IdentifierExpression)target).Identifier != initializer.Name) { return; } var expr = match.Get <Expression>("condition").Single(); AddIssue(new CodeIssue( ifElseStatement.IfToken, ctx.TranslateString("Convert to '||' expresssion"), ctx.TranslateString("Replace with '||'"), script => { var variable = varDeclaration.Variables.First(); script.Replace( varDeclaration, new VariableDeclarationStatement( varDeclaration.Type.Clone(), variable.Name, new BinaryOperatorExpression(variable.Initializer.Clone(), BinaryOperatorType.ConditionalOr, expr.Clone()) ) ); script.Remove(ifElseStatement); } ) { IssueMarker = IssueMarker.DottedLine }); return; } else { var expr = match.Get <Expression>("condition").Single(); AddIssue(new CodeIssue( ifElseStatement.IfToken, ctx.TranslateString("Convert to '|=' expresssion"), ctx.TranslateString("Replace with '|='"), script => { script.Replace( ifElseStatement, new ExpressionStatement( new AssignmentExpression( target.Clone(), AssignmentOperatorType.BitwiseOr, expr.Clone()) ) ); } )); } } }
public override void VisitIfElseStatement(IfElseStatement ifElseStatement) { base.VisitIfElseStatement(ifElseStatement); var match = ifPattern.Match(ifElseStatement); if (match.Success) { var varDeclaration = ifElseStatement.GetPrevSibling(s => s.Role == BlockStatement.StatementRole) as VariableDeclarationStatement; var target = match.Get <Expression>("target").Single(); var match2 = varDelarationPattern.Match(varDeclaration); if (match2.Success) { var initializer = varDeclaration.Variables.FirstOrDefault(); if (initializer != null && target is IdentifierExpression && ((IdentifierExpression)target).Identifier != initializer.Name) { return; } var expr = match.Get <Expression>("condition").Single(); AddIssue(new CodeIssue( ifElseStatement.IfToken, ctx.TranslateString("Convert to '&&' expresssion"), ctx.TranslateString("Replace with '&&'"), script => { var variable = initializer; var initalizerExpression = variable.Initializer.Clone(); var bOp = initalizerExpression as BinaryOperatorExpression; if (bOp != null && bOp.Operator == BinaryOperatorType.ConditionalOr) { initalizerExpression = new ParenthesizedExpression(initalizerExpression); } script.Replace( varDeclaration, new VariableDeclarationStatement( varDeclaration.Type.Clone(), variable.Name, new BinaryOperatorExpression(initalizerExpression, BinaryOperatorType.ConditionalAnd, CSharpUtil.InvertCondition(expr)) ) ); script.Remove(ifElseStatement); } ) { IssueMarker = IssueMarker.DottedLine }); return; } else { var expr = match.Get <Expression>("condition").Single(); AddIssue(new CodeIssue( ifElseStatement.IfToken, ctx.TranslateString("Convert to '&=' expresssion"), ctx.TranslateString("Replace with '&='"), script => script.Replace( ifElseStatement, new ExpressionStatement( new AssignmentExpression( target.Clone(), AssignmentOperatorType.BitwiseAnd, CSharpUtil.InvertCondition(expr) ) ) ) ) { IssueMarker = IssueMarker.DottedLine }); } } }