private Examples HandleTags(Examples example, SpecFlowDocument doc) { if (example.Tags == null) { return(example); } var unhandled = example.Tags.ToList(); var header = new ExamplesHeader(example.TableHeader.Cells.Select(c => c.Value)); var rows = new List <TableRow>(); foreach (var generator in container.GetGenerators()) { foreach (var tag in example.Tags) { var name = tag.SanitiseTag(); if (!generator.Handles(name)) { continue; } unhandled.Remove(tag); var generated = generator.GetRows(name, doc.SourceFilePath, header) .Select(r => r.ToTableRow(doc)) .ToList(); if (!generated.Any()) { throw new SemanticParserException($"Generator '{name}' returned no examples", tag.Location); } rows.AddRange(generated); } } return(!rows.Any() ? example : example.Clone(tags: unhandled, body: example.TableBody.Concat(RowSorter.MaybeSortRows(example.TableHeader, rows)))); }