check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
final ignoredInvocations =
configStringList(ruleConfig, 'ignored-invocations') ??
const ['print', 'debugPrint'];
final allowOnlyOnce = configBool(ruleConfig, 'allow-only-once') ?? false;
final pending = <_StringInfo>[];
void found(AstNode node, String value) {
if (allowOnlyOnce) {
pending.add(_StringInfo(node, value));
} else {
reportAtNode(node);
}
}
registry.addSimpleStringLiteral((node) {
if (node.parent is AdjacentStrings) return;
if (node.value.isEmpty) return;
if (_shouldSkip(node, ignoredInvocations)) return;
found(node, node.value);
});
registry.addAdjacentStrings((node) {
final value = node.strings
.whereType<SimpleStringLiteral>()
.map((s) => s.value)
.join();
if (value.isEmpty) return;
if (_shouldSkip(node, ignoredInvocations)) return;
found(node, value);
});
if (allowOnlyOnce) {
registry.afterLibrary(() {
final counts = <String, List<_StringInfo>>{};
for (final info in pending) {
(counts[info.value] ??= []).add(info);
}
for (final entry in counts.entries) {
if (entry.value.length >= 2) {
for (final info in entry.value) {
reportAtNode(info.node);
}
}
}
});
}
}