private static boolean isAndWithEqualToNull(BinaryExpressionTree tree) { return tree.is(Tree.Kind.CONDITIONAL_AND) && isNullComparison(tree.leftOperand(), Tree.Kind.EQUAL_TO, Tree.Kind.STRICT_EQUAL_TO); }
private static boolean isOrWithNonEqualToNull(BinaryExpressionTree tree) { return tree.is(Tree.Kind.CONDITIONAL_OR) && isNullComparison(tree.leftOperand(), Tree.Kind.NOT_EQUAL_TO, Tree.Kind.STRICT_NOT_EQUAL_TO); }
private boolean isOrWithNonEqualToNull(BinaryExpressionTree tree) { return tree.is(Tree.Kind.CONDITIONAL_OR) && isNullComparison(tree.leftOperand(), Tree.Kind.NOT_EQUAL_TO, Tree.Kind.STRICT_NOT_EQUAL_TO); }
private boolean isAndWithEqualToNull(BinaryExpressionTree tree) { return tree.is(Tree.Kind.CONDITIONAL_AND) && isNullComparison(tree.leftOperand(), Tree.Kind.EQUAL_TO, Tree.Kind.STRICT_EQUAL_TO); }
@Override public void endOfFile(ScriptTree scriptTree) { EqualityVisitor equalityVisitor = new EqualityVisitor(); equalityVisitor.scanTree(scriptTree); equalityVisitor.equalityExpressions .stream() .filter(equalityExpression -> !ignoredList.contains(equalityExpression)) .forEach(equalityExpression -> addIssue(equalityExpression.operatorToken(), equalityExpression.is(Kind.EQUAL_TO) ? "Replace \"==\" with \"===\"." : "Replace \"!=\" with \"!==\".") .secondary(equalityExpression.leftOperand()) .secondary(equalityExpression.rightOperand())); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (!tree.is(Kind.COMMA_OPERATOR)) { super.visitBinaryExpression(tree); return; } raiseIssue(tree); getAllSubExpressions(tree).forEach(expression -> super.scan(expression)); }
private static boolean isOneOntoOneShifting(BinaryExpressionTree tree) { return tree.is(Kind.LEFT_SHIFT) && tree.leftOperand().is(Kind.NUMERIC_LITERAL) && "1".equals(((LiteralTree) tree.leftOperand()).value()); }
private static boolean isPotentialNanComparison(BinaryExpressionTree tree) { return tree.is(Kind.STRICT_NOT_EQUAL_TO, Kind.STRICT_EQUAL_TO) && (tree.leftOperand().is( Kind.IDENTIFIER_REFERENCE, Kind.IDENTIFIER, Kind.BRACKET_MEMBER_EXPRESSION, Kind.DOT_MEMBER_EXPRESSION) || tree.leftOperand() instanceof UnaryExpressionTree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(BINARY_OPERATORS)) { visitExpression(tree.leftOperand()); visitExpression(tree.rightOperand()); } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (!tree.is(Kind.COMMA_OPERATOR)) { super.visitBinaryExpression(tree); return; } List<ExpressionTree> expressions = getAllSubExpressions(tree); String message; if (expressions.size() > 2) { message = "Remove use of all comma operators in this expression."; } else { message = "Remove use of this comma operator."; } getContext().addIssue(this, getFirstComma(tree), message); for (ExpressionTree expression : expressions) { super.scan(expression); } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (!isNullLiteral(tree.leftOperand()) && !isNullLiteral(tree.rightOperand())) { if (tree.is(Tree.Kind.EQUAL_TO)) { getContext().addIssue(this, tree.operator(), "Replace \"==\" with \"===\"."); } else if (tree.is(Tree.Kind.NOT_EQUAL_TO)) { getContext().addIssue(this, tree.operator(), "Replace \"!=\" with \"!==\"."); } } super.visitBinaryExpression(tree); }
private void raiseIssue(BinaryExpressionTree tree) { String message = tree.is(Kind.STRICT_EQUAL_TO) ? MESSAGE_EQUAL : MESSAGE_NOT_EQUAL; addIssue(tree.operatorToken(), message) .secondary(tree.leftOperand()) .secondary(tree.rightOperand()); } }
private void checkBinaryExpression(BinaryExpressionTree tree, Builder<ExpressionTree> operandListBuilder) { operandListBuilder.add(tree.rightOperand()); scan(tree.rightOperand()); if (tree.is(Kind.PLUS)) { if (tree.leftOperand().is(Kind.PLUS)) { checkBinaryExpression((BinaryExpressionTree) tree.leftOperand(), operandListBuilder); } else { operandListBuilder.add(tree.leftOperand()); scan(tree.leftOperand()); } } else { scan(tree.leftOperand()); } } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN_OR_EQUAL_TO) && isZeroLiteral(tree.rightOperand()) && tree.leftOperand().is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree leftOperand = ((DotMemberExpressionTree) tree.leftOperand()); if (isLengthOrSizeProperty(leftOperand)) { String propertyName = leftOperand.property().name(); addIssue(tree, String.format("Fix this expression; %s of \"%s\" is always greater or equal to zero.", propertyName, CheckUtils.asString(leftOperand.object()))); } } super.visitBinaryExpression(tree); }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (!tree.is(Kind.MULTIPLY, Kind.PLUS, Kind.ASSIGNMENT) && SyntacticEquivalence.areEquivalent(tree.leftOperand(), tree.rightOperand()) && isExcluded(tree)) { getContext().addIssue(this, tree, "Identical sub-expressions on both sides of operator \"" + tree.operator().text() + "\""); } super.visitBinaryExpression(tree); }