anchor.diff:              .having((issue) => issue.parser, 'parser', same(input))
               .having((issue) => issue.description, 'description', 'Described')
               .having((issue) => issue.fixer, 'fixer', isNull)
  +            .having(
  +                (issue) => issue.toString(),
  +                'toString',
  +                'LinterIssue(type: LinterType.error, title: Fake Rule, '
  +                    'parser: Instance of \'PredicateParser\'[trigger '
  +                    'expected], description: Described)')
         ]);
         expect(called, results);
       });
  
positive.code:         final parser = char('a');
          final analyzer = Analyzer(parser);
          final path = analyzer.findPathTo(parser, parser)!;
          expect(path.parsers, [parser]);
          expect(path.indexes, []);
          final paths = analyzer.findAllPathsTo(parser, parser).toList();
  
negative.code:         final parser = terminal | terminal;
          final analyzer = Analyzer(parser);
          final path = analyzer.findPathTo(parser, terminal)!;
          expect(path.source, parser);
          expect(path.target, terminal);
          expect(path.parsers, [parser, terminal]);
          expect(path.indexes, [0]);
          final paths = analyzer.findAllPathsTo(parser, terminal).toList();
  