check method
void
check(
- 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;
}
}
});
}