check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addBlock((node) {
    final statements = node.statements;
    if (statements.length < 2) return;

    for (var i = 0; i < statements.length - 1; i++) {
      final current = statements[i];
      if (current is! VariableDeclarationStatement) continue;

      final variables = current.variables.variables;
      if (variables.length != 1) continue;

      final variable = variables.first;
      if (variable.initializer == null) continue;

      final name = variable.name.lexeme;
      final next = statements[i + 1];

      final finder = _ReferenceFinder(name);
      next.accept(finder);
      if (finder.count != 1) continue;
      if (finder.isReceiver) continue;

      final remainingCount = _countInStatements(
        statements,
        name,
        fromIndex: i + 2,
      );
      if (remainingCount > 0) continue;

      reportAtNode(current);
    }
  });
}