check method

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

Implementation

@override
void check(DcqRegistry registry) {
  var hasFlutterImport = false;
  registry.addImportDirective((node) {
    final uri = node.uri.stringValue;
    if (uri != null && uri.startsWith('package:flutter/')) {
      hasFlutterImport = true;
    }
  });

  final pendingNodes = <GenericFunctionType>[];

  registry.addGenericFunctionType((node) {
    // Check: no parameters.
    if (node.parameters.parameters.isNotEmpty) return;

    // Check: returns Future<void>.
    final returnType = node.returnType;
    if (returnType is! NamedType) return;
    if (returnType.name.lexeme != 'Future') return;

    final typeArgs = returnType.typeArguments?.arguments;
    if (typeArgs == null || typeArgs.length != 1) return;
    final arg = typeArgs.first;
    if (arg is! NamedType || arg.name.lexeme != 'void') return;

    pendingNodes.add(node);
  });

  registry.afterLibrary(() {
    if (!hasFlutterImport) return;
    for (final node in pendingNodes) {
      reportAtNode(node);
    }
  });
}