Skip to content

Releases: sourcefrog/cargo-mutants

v26.0.0

08 Dec 03:37
v26.0.0

Choose a tag to compare

  • 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-arg option to pass additional arguments to cargo test.

  • New: --sharding option to control how mutants are distributed across multiple machines, with choices of slice or round-robin.

  • Changed: The default sharding strategy is now slice; previously it was round-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-fast argument to test targets to speed up mutation testing, on recent nightly toolchains.

  • Fixed: Don't error if the --in-diff patch file contains non-UTF-8 data in non-Rust files, or contains messages about binary files or git index changes.

  • New: start_time and end_time fields in outcomes.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_version field in outcomes.json.

  • Changed: Functions with attributes whose path ends with test are 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

10 Aug 16:29
v25.3.1
4994094

Choose a tag to compare

  • Fixed: cargo-mutants' own tests were failing on nightly due to a change in the format of messages emitted by tests.

v25.3.0

10 Aug 15:42
v25.3.0
69b696a

Choose a tag to compare

  • 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_ACTION environment variable is set, can be forced on with --annotations=github and forced off with --annotations=none.

v25.2.2

19 Jul 02:30
v25.2.2

Choose a tag to compare

  • 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 example delete match arm BinOp::BitOr(_) in ....

  • Internal: Automatically publish cargo-mutants to crates.io from GitHub Actions.

v25.2.2-pre2

19 Jul 02:15
v25.2.2-pre2

Choose a tag to compare

v25.2.2-pre2 Pre-release
Pre-release
  • Release packages from a github environment for added security.

v25.2.2-pre0

19 Jul 01:16
v25.2.2-pre0

Choose a tag to compare

v25.2.2-pre0 Pre-release
Pre-release
  • 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 example delete match arm BinOp::BitOr(_) in ....

v25.2.1

10 Jul 15:01
v25.2.1

Choose a tag to compare

  • Fixed: Updated to syn 2.0.104, which understands new Rust syntax including impl trait precise capturing.

v25.2.0

30 Jun 15:31
v25.2.0

Choose a tag to compare

  • New: gitignore config key in .cargo/mutants.toml to control whether .gitignore patterns are respected when copying source trees, corresponding to --gitignore.

  • Changed: The mutant name for mutations of match statements and guard expressions now includes the enclosing function name, for example replace match guard with true in find_path_attribute.

v25.1.0

05 Jun 14:41
v25.1.0

Choose a tag to compare

  • Changed: The --gitignore option now defaults to false, meaning .gitignore patterns are no longer respected when copying source trees by default. The /target directory is still excluded by default through explicit filtering. To restore the previous behavior, use --gitignore=true.

  • New: Mutate > to >= and < to <=.

  • Changed: Mutate &T to Box::leak(Box::new(...)), instead of a reference to a value, so that mutants aren't unviable due to returning references to temporary values.

  • New: --copy-target option allows copying the /target directory to build directories. By default, the target directory is excluded to avoid copying large build artifacts, but --copy-target=true can be used if tests depend on existing build artifacts.

  • New: Feature-related options can now be configured in .cargo/mutants.toml: features, all_features, and no_default_features. Command line arguments take precedence over config file settings for boolean options, while features from both sources are combined.

  • New: Produce a json schema for the config file with --emit-schema=config to support schema-guided editing. The schema has been proposed to SchemaStore so many editors should in future support it automatically.

  • New: The config file path can be specified with the --config option, overriding the default of .cargo/mutants.toml. (The pre-existing --no-config option turns it off.)

v25.0.1

09 Feb 14:56

Choose a tag to compare

  • New: Additional mutation patterns: delete match arms if there is a default arm, and replace if guards from match arms with true and false.

  • Changed: Show more type parameters in mutant names, like impl From<&str> for Foo rather than impl From for Foo.

  • Fixed: Support crates that use a non-default Cargo registry. Previously, cargo metadata failed with "registry index was not found."

  • Improved: Warn if --jobs is set higher than 8, which is likely to be too high.

  • Improved: Don't warn about expected/harmless exit codes from Nextest.