anchor.diff:  // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
   // for details. All rights reserved. Use of this source code is governed by a
   // BSD-style license that can be found in the LICENSE file.
  -
  -// @dart=2.10
   
   /// Implements an [Ignore] filter compatible with `.gitignore`.
   ///
  
positive.code: Iterable<_IgnoreRule> _parseIgnorePatterns(
    Iterable<String> patterns,
    bool ignoreCase, {
    void Function(String pattern, FormatException exception) onInvalidPattern,
  }) sync* {
    ArgumentError.checkNotNull(patterns, 'patterns');
    ArgumentError.checkNotNull(ignoreCase, 'ignoreCase');
    onInvalidPattern ??= (_, __) => null;
  
    final parsedPatterns = patterns
        .expand((s) => s.split(_lineBreakPattern))
  
negative.code:   if (first == end) return _IgnoreParseResult.empty(pattern);
  
    var current = first;
    String? peekChar() => current >= end ? null : pattern[current];
  
    var expr = '';
  
    // Parses the inside of a [] range. Returns the value as a RegExp character
    // range, or null if the pattern was broken.
    String? parseCharacterRange() {
      var characterRange = '';
      var first = true;
      for (;;) {
  