check method

  1. @override
void check(
  1. DcqRegistry registry
)

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addBinaryExpression((node) {
    final operator = node.operator.lexeme;
    if (operator != '&&' && operator != '||') return;

    // Avoid reporting on sub-expressions of an already-reported chain.
    final parent = node.parent;
    if (parent is BinaryExpression && parent.operator.lexeme == operator) {
      return;
    }

    final comparisons = <_Comparison>[];
    final negations = <String>[];
    final positives = <String>[];
    _collectTerms(node, operator, comparisons, negations, positives);

    if (_hasNegationContradiction(negations, positives)) {
      reportAtNode(node);
      return;
    }

    if (operator == '&&' && _hasComparisonContradiction(comparisons)) {
      reportAtNode(node);
    }
  });
}