blob: e72f4ac0ff8de568703d33d836e6aaf7fa902051 [file] [log] [blame] [view]
# Clang tidy
This toolchain suite ships with a set of tools to download and integrate
clang-tidy into your build. To integrate this into your build you may either use
the default configuration that ships with clang-tidy-12 or configure your
repository.
## Getting started
To make use of the default configuration for clang-tidy you can simply compile
with the command line flags as shown below.
```sh
bazel build //your:target --aspects \
@rules_cc_toolchain//tools/clang_tidy:clang_tidy.bzl%clang_tidy_aspect \
--output_groups=report
```
## Specifying your own clang-tidy configuration
You will need to create a `.clang-tidy` config file somewhere in your
repository. In contrast to the
[clang tidy docs](https://clang.llvm.org/extra/clang-tidy) this file can be
anywhere in your repository. This can be useful if you would like define and
then switch between multiple analysis configs.
### Example
First create your custom `.clang-tidy` config file;
```yaml
# //static_analysis:.clang-tidy
# Use all built in checks provided by the clang toolchain.
Checks: 'clang-diagnostic-*,clang-analyzer-*'
# Treat all warnings as errors.
WarningsAsErrors: '*'
```
Now create a `BUILD.bazel` file in the same directory to create your build
config.
```py
# //static_analysis:BUILD.bazel
load("@rules_cc_toolchain/tools/clang_tidy:clang_tidy.bzl",
"clang_tidy_config")
clang_tidy_config(
name = "my_custom_config",
config = ".clang-tidy",
visibility = ["//visibility:public"],
)
```
You can now override the default configuration for this repository by adding the
flags as follows.
```sh
bazel build //your:target --aspects \
@rules_cc_toolchain//tools/clang_tidy:clang_tidy.bzl%clang_tidy_aspect \
--output_groups=report \
--@rules_cc_toolchain_config//:clang_tidy_config=\
//static_analysis:clang_tidy_config
```
For conveniance this can be shortened by adding the following lines to your
`.bazelrc`.
```
# //:.bazelrc
# ...
# Configures static analyser.
build:analyser --aspects @rules_cc_toolchain//tools/clang_tidy:clang_tidy.bzl%clang_tidy_aspect
build:analyser --output_groups=report
build --@rules_cc_toolchain_config//:clang_tidy_config=@trackalab//:clang_tidy_config
```
This then reduces the build command to;
`bazel build //your:target --config analyser`