# Mutants no test can kill, with the reason each is equivalent to the code it # replaces. Recorded from the first mutation run of the render chain (infra # `bb414371`, 2026-08-26: 9 survivors, 2 timeouts). Excluding them is what keeps # a later run's "0 missed" worth reading. # # The patterns are regexes, so `+`, `*` and `|` need escaping. A bare `||` is an # empty alternation and silently excludes every mutant in the crate. # # Add an entry only with its reason written out, and only after trying to kill # the mutant with a test: of the nine survivors here, four were coverage gaps. exclude_re = [ # `inject_heading_ids` scans for a heading's text between its Start and its # End. Starting that scan at the Start event itself rather than one past it # changes nothing: `Event::Start` falls to the `_ => {}` arm and contributes # no text. Same for the outer cursor: landing on the End event instead of # one past it costs one loop iteration that matches no Start. "replace \\+ with \\* in inject_heading_ids", # The inner scan's bound. pulldown-cmark always closes a heading it opened, # so the loop leaves on `Event::End(TagEnd::Heading)` and the bound is never # the thing that stops it. `<=` would only differ on an event stream that # ends inside a heading, which the parser cannot produce. "replace < with <= in inject_heading_ids", # `permissive_builder` IS `ammonia::Builder::default()`, so replacing its # body with `Default::default()` is the same code. The function exists to be # the one named construction point for the permissive preset (UX-S3), not to # behave differently from the default, and the regression tests in # `sanitize` pin what that default has to keep doing. "replace permissive_builder -> ammonia::Builder<'static> with Default::default\\(\\)", ]