check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addMethodDeclaration((node) {
    if (node.isStatic) return;
    if (node.isAbstract) return;
    if (node.isGetter || node.isSetter) return;
    if (node.isOperator) return;

    final name = node.name.lexeme;
    if ((configBool(ruleConfig, 'ignore-private') ?? false) &&
        name.startsWith('_')) {
      return;
    }
    if ((configBool(ruleConfig, 'ignore-public') ?? false) &&
        !name.startsWith('_')) {
      return;
    }

    final metadata = node.metadata;
    for (final annotation in metadata) {
      if (annotation.name.name == 'override') return;
    }

    final bodyNode = node.parent;
    if (bodyNode is! BlockClassBody) return;
    final parent = bodyNode.parent;
    if (parent is! ClassDeclaration) return;

    final instanceMembers = _collectInstanceMemberNames(parent);
    final visitor = _InstanceMemberVisitor(instanceMembers);

    for (final param in node.parameters?.parameters ?? <FormalParameter>[]) {
      final name = param.name?.lexeme;
      if (name != null) visitor.excludedNames.add(name);
    }

    node.body.accept(visitor);

    if (!visitor.usesInstanceMember) {
      reportAtToken(node.name);
    }
  });
}