# clippy

[clippy] is the tool for Rust static analysis.

## Run Locally

The mozlint integration of clippy can be run using mach:

```{eval-rst}
.. parsed-literal::

    $ mach lint --linter clippy <file paths>

    # Return warnings

    $ mach lint --warnings --linter clippy <file paths>
```

:::{note}
clippy expects a path or a .rs file. It doesn't accept Cargo.toml
as it would break the mozlint workflow.
:::

To use Rust nightly, you can set the environment variable `RUSTUP_TOOLCHAIN` to `nightly`:

% parsed-literal:
%
% # Note that you need to have nightly installed with Rustup
% # A clobber might be necessary after switching toolchains
% $ RUSTUP_TOOLCHAIN=nightly ./mach lint --warning -l clippy .

## Configuration

To enable clippy on new directory, add the path to the include
section in the {searchfox}`clippy.yml <tools/lint/clippy.yml>` file.

To enable additional clippy rules beyond the defaults, add them to the
`warn` or `deny` lists in [clippy.yml](https://searchfox.org/mozilla-central/source/tools/lint/clippy.yml):

```yaml
warn:
    - needless_return
deny:
    - some_critical_lint
```

The full list of available lints is at <https://rust-lang.github.io/rust-clippy/master/>.

## Sources

- {searchfox}`Configuration (YAML) <tools/lint/clippy.yml>`
- {searchfox}`Source <tools/lint/clippy/__init__.py>`
