anchor.diff:    void registerNodeProcessors(
         NodeLintRegistry registry, LinterContext context) {
       var visitor = _Visitor(this, context);
  -    registry.addSimpleIdentifier(this, visitor);
  +    registry.addMethodInvocation(this, visitor);
     }
   
     void reportLintWithDescription(AstNode? node, String description) {
  
positive.code:     // Going up in AST structure to find binary comparison operator for this
      // `indexOf` access. Most of the time it will be a parent, but sometimes
      // it can be wrapped in parentheses or `as` operator.
      AstNode? search = indexOfAccess;
      while (
          search != null && search is Expression && search is! BinaryExpression) {
        search = search.parent;
  
negative.code:   _Visitor(this.rule, this.context);
  
    @override
    void visitMethodInvocation(MethodInvocation node) {
      if (node.methodName.name != 'indexOf') {
        return;
      }
  
      var parentType = node.target?.staticType;
      if (parentType == null ||
          !DartTypeUtilities.implementsAnyInterface(parentType, [
            InterfaceTypeDefinition('Iterable', 'dart.core'),
            InterfaceTypeDefinition('String', 'dart.core'),
          ])) {
        return;
      }
  
      if (node.parent is AssignmentExpression) {
        // The result of `indexOf` is being assigned before being compared, so
        // it's important. E.g.  `(next = list.indexOf('{')) != -1)`.
        return;
  