Releases: sourcefrog/cargo-mutants
v26.2.0
-
New: Mutation diffs are included in JSON listings and
mutants.json. -
Fixed: Mutate
NonZeroUsizeinto e.g.1.try_into().unwrap(): the previously generated mutants were always unviable. Thanks to @sandersaares.
cargo-mutants 26.1.2
No user-facing changes, only packaging changes and an attempt to adopt release-plz.
cargo-mutants-v26.1.1
Other
- Switch to using release-plz for release automation.
v26.0.0
-
Changed: The default is now not to shuffle mutants: they run in the deterministic order they are generated in the source tree. This should give somewhat better locality of reference due to consecutively testing changes in each package or module. The previous behavior can be restored with
--shuffle. -
New:
--cargo-test-argoption to pass additional arguments tocargo test. -
New:
--shardingoption to control how mutants are distributed across multiple machines, with choices ofsliceorround-robin. -
Changed: The default sharding strategy is now
slice; previously it wasround-robin. Sliced sharding gives each worker better locality of reference due to testing changes to related packages, but may make the runtime more uneven between workers if some packages are slower to test than others. -
Changed: Tree copying now attempts to use reflinks (copy-on-write) for faster copying on supported filesystems (Btrfs, XFS, APFS), with automatic fallback to regular copying.
-
Book: Recommend using the
-Zunstable-options --fail-fastargument to test targets to speed up mutation testing, on recent nightly toolchains. -
Fixed: Don't error if the
--in-diffpatch file contains non-UTF-8 data in non-Rust files, or contains messages about binary files or git index changes. -
New:
start_timeandend_timefields inoutcomes.json. -
New: Delete individual fields from struct literals that have a base (default) expression like
..Default::default()or..base_value. This checks that tests verify each field is set correctly and not just relying on default values. -
New:
cargo_mutants_versionfield inoutcomes.json. -
Changed: Functions with attributes whose path ends with
testare now skipped, not just those with the plain#[test]attribute. This means functions with#[tokio::test],#[sqlx::test], and similar testing framework attributes are automatically excluded from mutation testing. -
Changed: The bitwise assignment operators
&=and|=are no longer mutated to^=. In code that accumulates bits into a bitmap starting from zero (e.g.,bitmap |= new_bits),|=and^=produce the same result, making such mutations uninformative.
v25.3.1
- Fixed: cargo-mutants' own tests were failing on nightly due to a change in the format of messages emitted by tests.
v25.3.0
-
New: A specific clearer error if a valid non-empty diff changes no Rust source files, and so matches no mutants. Thanks to @brunoerg.
-
New: cargo-mutants can emit GitHub Actions structured annotations for missed mutants, which appear as warnings outside of the log text. This behavior is on by default when the
GITHUB_ACTIONenvironment variable is set, can be forced on with--annotations=githuband forced off with--annotations=none.
v25.2.2
-
Changed: The mutant name of "replace match guard" mutations now includes the original match guard, for example
replace match guard path.path.is_ident("str") with true in type_replacements. Similarly, the "delete match arm" mutation includes the pattern of the arm, for exampledelete match arm BinOp::BitOr(_) in .... -
Internal: Automatically publish cargo-mutants to crates.io from GitHub Actions.
v25.2.2-pre2
- Release packages from a github environment for added security.
v25.2.2-pre0
- Changed: The mutant name of "replace match guard" mutations now includes the original match guard, for example
replace match guard path.path.is_ident("str") with true in type_replacements. Similarly, the "delete match arm" mutation includes the pattern of the arm, for exampledelete match arm BinOp::BitOr(_) in ....
v25.2.1
- Fixed: Updated to
syn2.0.104, which understands new Rust syntax including impl trait precise capturing.