check method

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

Implementation

@override
void check(DcqRegistry registry) {
  registry.addCompilationUnit((node) {
    final visitor = _MagicNumberVisitor(
      allowed: _parseAllowed(ruleConfig) ?? const [-1, 0, 1],
      ignoreInstances: configBool(ruleConfig, 'ignore-instances') ?? false,
    );
    node.accept(visitor);

    final literals = visitor.magicLiterals;
    if (literals.isEmpty) return;

    if (configBool(ruleConfig, 'allow-only-once') ?? false) {
      // Group by numeric value and only report values appearing more than
      // once in the file.
      final groups = <num, List<AstNode>>{};
      for (final entry in literals) {
        (groups[entry.value] ??= []).add(entry.node);
      }

      for (final nodes in groups.values) {
        if (nodes.length > 1) {
          for (final n in nodes) {
            reportAtNode(n);
          }
        }
      }
    } else {
      for (final entry in literals) {
        reportAtNode(entry.node);
      }
    }
  });
}