Cargo diff-tools

Run cargo check and cargo clippy hiding the warning messages whose primary line is not included in a git diff. Useful in large projects to hide warning messages that are probably not related to the changes made by a pull request.

Inspired by Patryk27/clippy-dirty.

Examples

Run cargo clippy hiding the warning messages whose primary line is not included in a git origin/master HEAD:

bash cargo-clippy-diff origin/master HEAD

The same, for cargo check:

bash cargo-check-diff origin/master HEAD

Various git diff arguments are supported:

bash cargo-clippy-diff HEAD # internally calls `git diff HEAD` cargo-clippy-diff --staged # internally calls `git diff --staged` cargo-clippy-diff first-branch...second-branch origin/master # and so on

Place cargo check arguments after a --:

bash cargo-check-diff HEAD -- --all-features

Place cargo clippy arguments after a -- (note that the second -- is one of clippy's arguments):

bash cargo-clippy-diff HEAD -- --all-features -- -D clippy::lint_name

To display diagnostics as JSON objects, use --output=json:

bash cargo-clippy-diff --output=json origin/master HEAD

To display diagnostics as workflow commands in GitHub Actions (useful to automatically add comments to pull requests), use --output=github:

```bash git fetch origin $GITHUBBASEREF --depth=1 cargo-clippy-diff --output=github origin/$GITHUBBASEREF..

Example output "::warning file=lib.rs,line=4,col=2::Missing semicolon"

```

For other cargo commands, filter-by-diff can be used to filter any stream of JSON diagnostics:

bash cargo build --message-format=json-diagnostic-rendered-ansi \ | filter-by-diff --output=rendered origin/master HEAD