check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  final ignoredInvocations =
      configStringList(ruleConfig, 'ignored-invocations') ?? const [];

  registry.addStringInterpolation((node) {
    if (ignoredInvocations.isNotEmpty) {
      final parent = node.parent;
      if (parent is ArgumentList) {
        final grandparent = parent.parent;
        String? invocationName;
        if (grandparent is MethodInvocation) {
          invocationName = grandparent.methodName.name;
        } else if (grandparent is FunctionExpressionInvocation) {
          final fn = grandparent.function;
          if (fn is SimpleIdentifier) invocationName = fn.name;
        }
        if (invocationName != null &&
            ignoredInvocations.contains(invocationName)) {
          return;
        }
      }
    }

    for (final element in node.elements) {
      if (element is InterpolationExpression) {
        final expr = element.expression;
        final type = expr.staticType;
        if (type == null) continue;
        if (type.nullabilitySuffix != NullabilitySuffix.question) continue;

        if (_isPromotedNonNull(expr)) continue;

        reportAtNode(element);
      }
    }
  });
}