check method

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

Implementation

@override
void check(DcqRegistry registry) {
  registry.addSwitchStatement((node) {
    final bodies = <String, SwitchMember>{};

    for (final member in node.members) {
      // Support both legacy SwitchCase and Dart 3 SwitchPatternCase.
      if (member is! SwitchCase && member is! SwitchPatternCase) continue;

      // Normalize whitespace so formatting differences don't affect
      // comparison (e.g. `foo(a, b)` vs `foo(a,b)`).
      final body = member.statements
          .map((s) => s.toSource().replaceAll(RegExp(r'\s+'), ' ').trim())
          .join(' ');
      if (body.isEmpty) continue; // fall-through

      if (bodies.containsKey(body)) {
        reportAtNode(member);
      } else {
        bodies[body] = member;
      }
    }
  });

  registry.addSwitchExpression((node) {
    final bodies = <String, SwitchExpressionCase>{};

    for (final member in node.cases) {
      final body = member.expression
          .toSource()
          .replaceAll(RegExp(r'\s+'), ' ')
          .trim();
      if (body.isEmpty) continue;

      if (bodies.containsKey(body)) {
        reportAtNode(member);
      } else {
        bodies[body] = member;
      }
    }
  });
}