From 31e5506d1c0d43ea919199e1d6bc96fe73d234f9 Mon Sep 17 00:00:00 2001 From: Johan Norberg Date: Fri, 15 Nov 2024 12:25:58 +0100 Subject: [PATCH] Add global option to disable running clang-tidy on headers * Commit f43f9d61c201b314c62a3ebcf2d4a37f1a3b06f7 added support to run clang-tidy on headers. After that commit, all headers will be checked by clang-tidy. * Commit a01e5e262e6d604c21ed11c420a2a245397b995a added a tag to make it possible to not run clang-tidy on specific libraries. * For projects that only want to run clang-tidy on source files, the only way to disable running clang-tidy on headers is to add the above mentioned tag to all libraries. For large projects this requires changing all BUILD files. This commit adds a global option instead to always disable running clang-tidy on headers. --- BUILD | 8 ++++++++ MODULE.bazel | 2 ++ clang_tidy/clang_tidy.bzl | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/BUILD b/BUILD index eaec502..eb152e6 100644 --- a/BUILD +++ b/BUILD @@ -1,3 +1,11 @@ +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") + +bool_flag( + name = "run_on_headers", + build_setting_default = True, + visibility = ["//visibility:public"], +) + filegroup( name = "clang_tidy_config_default", srcs = [ diff --git a/MODULE.bazel b/MODULE.bazel index ba6c1db..061177e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1 +1,3 @@ module(name = "bazel_clang_tidy") + +bazel_dep(name = "bazel_skylib", version = "1.7.1") diff --git a/clang_tidy/clang_tidy.bzl b/clang_tidy/clang_tidy.bzl index b9cc5bb..f3537e5 100644 --- a/clang_tidy/clang_tidy.bzl +++ b/clang_tidy/clang_tidy.bzl @@ -1,5 +1,6 @@ load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") +load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") def _run_tidy( ctx, @@ -223,6 +224,12 @@ def _clang_tidy_aspect_impl(target, ctx): cxx_flags = safe_flags(toolchain_flags(ctx, ACTION_NAMES.cpp_compile) + rule_flags) + ["-xc++"] include_headers = "no-clang-tidy-headers" not in ctx.rule.attr.tags + run_on_headers = ctx.attr._run_on_headers[BuildSettingInfo].value + if type(run_on_headers) == type(True): + if not run_on_headers: + include_headers = False + + srcs = rule_sources(ctx.rule.attr, include_headers) outputs = [ @@ -255,6 +262,7 @@ clang_tidy_aspect = aspect( "_clang_tidy_executable": attr.label(default = Label("//:clang_tidy_executable")), "_clang_tidy_additional_deps": attr.label(default = Label("//:clang_tidy_additional_deps")), "_clang_tidy_config": attr.label(default = Label("//:clang_tidy_config")), + "_run_on_headers": attr.label(default = Label("//:run_on_headers")), }, toolchains = ["@bazel_tools//tools/cpp:toolchain_type"], )