blob: 2d82b4b1056587256818e266347e0640baea88ff [file] [log] [blame] [view] [edit]
# clang_tidy
A wrapper library and program that runs `clang_tidy` on the Flutter engine repo.
```shell
# Assuming you are in the `flutter` root of the engine repo.
dart ./tools/clang_tidy/bin/main.dart
```
By default, the linter runs over _modified_[^1] files in the _latest_[^2] build
of the engine.
A subset of checks can also be fixed automatically by passing `--fix`:
```shell
dart ./tools/clang_tidy/bin/main.dart --fix
```
To configure what lints are enabled, see [`.clang-tidy`](../../.clang-tidy).
> **💡 TIP**: If you're looking for the git pre-commit hook configuration, see
> [`githooks`](../githooks).
## Advanced Usage
Some common use cases are described below, or use `--help` to see all options.
### Run with checks added or removed
To run adding a check _not_ specified in `.clang-tidy`:
```shell
dart ./tools/clang_tidy/bin/main.dart --checks="<check-name-to-run>"
```
It's possible also to use wildcards to add multiple checks:
```shell
dart ./tools/clang_tidy/bin/main.dart --checks="readability-*"
```
To remove a specific check:
```shell
dart ./tools/clang_tidy/bin/main.dart --checks="-<check-name-to-remove>"
```
To remove multiple checks:
```shell
dart ./tools/clang_tidy/bin/main.dart --checks="-readability-*"
```
To remove _all_ checks (usually to add a specific check):
```shell
dart ./tools/clang_tidy/bin/main.dart --checks="-*,<only-check-to-run>"
```
### Specify a specific build
There are some rules that are only applicable to certain builds, or to check
a difference in behavior between two builds.
Use `--target-variant` to specify a build:
```shell
dart ./tools/clang_tidy/bin/main.dart --target-variant <engine-variant>
```
For example, to check the `android_debug_unopt` build:
```shell
dart ./tools/clang_tidy/bin/main.dart --target-variant android_debug_unopt
```
In rarer cases, for example comparing two different checkouts of the engine,
use `--src-dir=<path/to/engine/src>`.
### Lint entire repository
When adding a new lint rule, or when checking lint rules that impact files that
have not changed.
Use `--lint-all` to lint all files in the repo:
```shell
dart ./tools/clang_tidy/bin/main.dart --lint-all
```
Or, provide a regular expression to lint files that match:
```shell
dart ./tools/clang_tidy/bin/main.dart --lint-regex=".*test.*\.cc"
```
> **⚠️ WARNING**: This may take a long time to run if a pattern is not provided
> or if the pattern matches a large number of files, i.e. on the order of
> thousands of files could take 30 minutes or more to run and lock your
> machine.
[^1]: Modified files are determined by a `git diff` command compared to `HEAD`.
[^2]: Latest build is the last updated directory in `src/out/`.