rust/clippy_dev
Matthias Krüger 45424c7e75 lintcheck: add --fix mode which tries to apply lint suggestions to the sources and prints a warning if that fails
Great for spotting false positives/broken suggestions of applicable lints.

There are false positives though becasue I'm not sure yet how to silence rustc warnings while keeping clippy warnings.
Sometimes rustc makes a suggestion that fails to apply and the implementation does not differenciate between clippy and rustc warnings when applying lint suggestions.

changelog: none
2021-03-05 17:11:21 +01:00
..
src lintcheck: add --fix mode which tries to apply lint suggestions to the sources and prints a warning if that fails 2021-03-05 17:11:21 +01:00
Cargo.toml lintcheck: parallelize 2021-02-19 00:14:43 +01:00
lintcheck_crates.toml update lintcheck_crates logs and fix typos 2021-02-28 23:07:12 +01:00
README.md lintcheck: Add a note that -Wclippy::all is enabled by default 2021-02-17 08:35:57 +01:00
test_sources.toml lintcheck: add test 2021-03-04 22:33:35 +01:00

Clippy Dev Tool

The Clippy Dev Tool is a tool to ease Clippy development, similar to rustcs x.py.

Functionalities (incomplete):

lintcheck

Runs clippy on a fixed set of crates read from clippy_dev/lintcheck_crates.toml and saves logs of the lint warnings into the repo. We can then check the diff and spot new or disappearing warnings.

From the repo root, run:

cargo run --target-dir clippy_dev/target --package clippy_dev \
--bin clippy_dev --manifest-path clippy_dev/Cargo.toml --features lintcheck -- lintcheck

or

cargo dev-lintcheck

By default the logs will be saved into lintcheck-logs/lintcheck_crates_logs.txt.

You can set a custom sources.toml by adding --crates-toml custom.toml or using LINTCHECK_TOML="custom.toml" where custom.toml must be a relative path from the repo root.

The results will then be saved to lintcheck-logs/custom_logs.toml.

Configuring the Crate Sources

The sources to check are saved in a toml file. There are three types of sources.

  1. Crates-io Source

    bitflags = {name = "bitflags", versions = ['1.2.1']}
    

    Requires a "name" and one or multiple "versions" to be checked.

  2. git Source

    puffin = {name = "puffin", git_url = "https://github.com/EmbarkStudios/puffin", git_hash = "02dd4a3"}
    

    Requires a name, the url to the repo and unique identifier of a commit, branch or tag which is checked out before linting. There is no way to always check HEAD because that would lead to changing lint-results as the repo would get updated. If git_url or git_hash is missing, an error will be thrown.

  3. Local Dependency

    clippy = {name = "clippy", path = "/home/user/clippy"}
    

    For when you want to add a repository that is not published yet.

Command Line Options (optional)

bitflags = {name = "bitflags", versions = ['1.2.1'], options = ['-Wclippy::pedantic', '-Wclippy::cargo']}

It is possible to specify command line options for each crate. This makes it possible to only check a crate for certain lint groups. If no options are specified, the lint groups clippy::all, clippy::pedantic, and clippy::cargo are checked. If an empty array is specified only clippy::all is checked.

Note: -Wclippy::all is always enabled by default, unless -Aclippy::all is explicitly specified in the options.