Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Run clang-tidy on Bazel C++ targets directly, efficiently, with caching enabled

License

NotificationsYou must be signed in to change notification settings

erenon/bazel_clang_tidy

Repository files navigation

Run clang-tidy on Bazel C/C++ targets directly,without generating a compile commands database,and take advantage of Bazels powerful cache mechanism.

Usage:

# //:WORKSPACEload("@bazel_tools//tools/build_defs/repo:git.bzl","git_repository",)git_repository(name="bazel_clang_tidy",commit="bff5c59c843221b05ef0e37cef089ecc9d24e7da",remote="https://github.com/erenon/bazel_clang_tidy.git",)

You can now compile using the default clang tidy configuration provided usingthe following command;

bazel build //... \  --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect \  --output_groups=report

If you would like to override the default clang tidy configuration then you canreconfigure the default target from the command line. To do this you must firstmake a filegroup target that has the .clang-tidy config file as a datadependency.

# //:BUILDfilegroup(name="clang_tidy_config",srcs= [".clang-tidy"],visibility= ["//visibility:public"],)

Now you can override the default config file in this repository usinga command line flag;

bazel build //... \  --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect \  --output_groups=report \  --@bazel_clang_tidy//:clang_tidy_config=//:clang_tidy_config

❗ the config-file will not be forced by adding it to the clang-tidy command line. Therefore it must be in one of the parents of all source files. It is recommended to put it in the root directly besides the WORKSPACE file.

Now if you don't want to type this out every time, it is recommended that youadd a config in your .bazelrc that matches this command line;

# Required for bazel_clang_tidy to operate as expectedbuild:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspectbuild:clang-tidy --output_groups=report# Optionally override the .clang-tidy config file targetbuild:clang-tidy --@bazel_clang_tidy//:clang_tidy_config=//:clang_tidy_config

Now from the command line this is a lot nicer to use;

bazel build //... --config clang-tidy

use a non-system clang-tidy

by default, bazel_clang_tidy uses the system provided clang-tidy.If you have a hermetic build, you can use your own clang-tidy target like this:

build:clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=@local_config_cc//:clangtidy_bin

This aspect is not executed on external targets. To exclude other targets,users may tag a target withno-clang-tidy ornoclangtidy.

Features

  • Run clang-tidy on any C/C++ target
    • A file is treated as C if it has the.c extension or its target includes theclang-tidy-is-c-tu tag; otherwise, it is treated as C++.
  • Run clang-tidy without also building the target
  • Use Bazel to cache clang-tidy reports: recompute stale reports only

Install

Copy.clang-tidy,BUILD andclang_tidy dir to your workspace.Edit.clang-tidy as needed.

Example

To see the tool in action:

  1. Clone the repository

  2. Run clang-tidy:

    bazel build //example --aspects clang_tidy/clang_tidy.bzl%clang_tidy_aspect --output_groups=report
  3. Check the error:

    lib.cpp:4:43: error: the parameter 'name' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param,-warnings-as-errors] std::string lib_get_greet_for(std::string name)Aspect //clang_tidy:clang_tidy.bzl%clang_tidy_aspect of //example:app failed to build
  4. Fix the error by changinglib.cpp only.

  5. Re-run clang-tidy with the same command. Observe that it does not run clang-tidy forapp.cpp: the cached report is re-used.

Requirements

  • Bazel 4.0 or newer (might work with older versions)

About

Run clang-tidy on Bazel C++ targets directly, efficiently, with caching enabled

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp