llvm/mlir/utils/clang-tidy/README.md

### Apply clang-tidy fixes on the repo

This script runs clang-tidy on every C++ source file in MLIR and commit
the results of the checks individually. Be aware that it'll take over
10h to process the entire codebase.

The advised way to use this is to build clang-tidy (in release mode) and
have another build directory for MLIR. Here is a sample invocation from
the root of the repo:

```bash
{ time \
  CLANG_TIDY=build-clang/bin/clang-tidy \
  TIMING_TIDY=time \
  ./mlir/utils/clang-tidy/apply-clang-tidy.sh build mlir ~/clang-tidy-fails/
} 2>&1 | tee ~/clang-tidy.log
```

- `build-clang/` contains the result of a build of clang-tidy, configured
  and built somehow with:
```bash
$ cmake ../llvm \
  -DLLVM_ENABLE_PROJECTS="clang;mlir;clang-tools-extra" \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -G Ninja
$ ninja clang-tidy
```
- `build/` must be a directory with MLIR onfigured. It is highly advised to
  use `ccache` as well, as this directory will be used to rerun
  `ninja check-mlir` after every single clang-tidy fix.
```bash
$ cmake ../llvm \
  -DLLVM_ENABLE_PROJECTS="mlir" \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_ASSERTIONS=ON \
  -DLLVM_TARGETS_TO_BUILD="Native;NVPTX;AMDGPU" \
  -DLLVM_CCACHE_BUILD=ON \
  -DCMAKE_C_COMPILER=clang \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DLLVM_ENABLE_LLD=ON \
  -DLLVM_BUILD_EXAMPLES=OFF \
  -DMLIR_ENABLE_BINDINGS_PYTHON=ON \
  -G Ninja
```
- `mlir/` is the directory where to find the files, it can be replaced by a
  subfolder or the path to a single file.
- `mkdir -p ~/clang-tidy-fails/` will be a directory containing the patches
  that clang-tidy produces but also fail the build.