From b1cc26664fef4dff3f966a3c0dd09a0fe84c2d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurenz=20Altenm=C3=BCller?= Date: Wed, 15 Nov 2023 10:04:16 +0100 Subject: [PATCH 1/2] Allow treating /_virtual_includes/ and bazel-out/ as -isystem --- clang_tidy/clang_tidy.bzl | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/clang_tidy/clang_tidy.bzl b/clang_tidy/clang_tidy.bzl index 4d515fc..3410083 100644 --- a/clang_tidy/clang_tidy.bzl +++ b/clang_tidy/clang_tidy.bzl @@ -59,12 +59,33 @@ def _run_tidy( for i in compilation_context.framework_includes.to_list(): args.add("-F" + i) - for i in compilation_context.includes.to_list(): - args.add("-I" + i) - - args.add_all(compilation_context.quote_includes.to_list(), before_each = "-iquote") + isystems = compilation_context.system_includes.to_list() + + if ctx.attr._clang_tidy_virtual_includes_are_system_includes: + # Include anything that uses include_prefix or strip_include_prefix as a system include + include_dirs = [] + for include in compilation_context.includes.to_list(): + if "/_virtual_includes/" in include: + isystems.append(include) + else: + include_dirs.append(include) + else: + include_dirs = compilation_context.includes.to_list() + + if ctx.attr._clang_tidy_bazel_out_includes_are_system_includes: + # Treat generated code in bazel-out/ as system include + iquotes = [] + for quote_include in compilation_context.quote_includes.to_list(): + if quote_include.startswith("bazel-out/"): + isystems.append(quote_include) + else: + iquotes.append(quote_include) + else: + iquotes = compilation_context.quote_includes.to_list() - args.add_all(compilation_context.system_includes.to_list(), before_each = "-isystem") + args.add_all(include_dirs, before_each = "-I") + args.add_all(iquotes, before_each = "-iquote") + args.add_all(isystems, before_each = "-isystem") ctx.actions.run( inputs = inputs, @@ -184,6 +205,8 @@ 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")), + "_clang_tidy_bazel_out_includes_are_system_includes": attr.bool(default = False), + "_clang_tidy_virtual_includes_are_system_includes": attr.bool(default = False), }, toolchains = ["@bazel_tools//tools/cpp:toolchain_type"], ) From f1d6a83897c196d66c0526bda6eda3049827589c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurenz=20Altenm=C3=BCller?= Date: Wed, 15 Nov 2023 10:22:35 +0100 Subject: [PATCH 2/2] Add actual `bool_flag`s for the settings --- .bazelrc | 4 +++- BUILD | 14 ++++++++++++++ WORKSPACE | 14 ++++++++++++++ clang_tidy/clang_tidy.bzl | 4 ++-- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.bazelrc b/.bazelrc index 2d2ed2b..e83c5da 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,2 +1,4 @@ build:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect -build:clang-tidy --output_groups=report \ No newline at end of file +build:clang-tidy --output_groups=report +build:clang-tidy --@bazel_clang_tidy//:clang_tidy_bazel_out_includes_are_system_includes=True +build:clang-tidy --@bazel_clang_tidy//:clang_tidy_virtual_includes_are_system_includes=True diff --git a/BUILD b/BUILD index eaec502..6be41aa 100644 --- a/BUILD +++ b/BUILD @@ -1,3 +1,5 @@ +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") + filegroup( name = "clang_tidy_config_default", srcs = [ @@ -33,3 +35,15 @@ label_flag( build_setting_default = ":clang_tidy_additional_deps_default", visibility = ["//visibility:public"], ) + +bool_flag( + name = "clang_tidy_bazel_out_includes_are_system_includes", + build_setting_default = False, + visibility = ["//visibility:public"], +) + +bool_flag( + name = "clang_tidy_virtual_includes_are_system_includes", + build_setting_default = False, + visibility = ["//visibility:public"], +) diff --git a/WORKSPACE b/WORKSPACE index adfd402..ec2d035 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1 +1,15 @@ workspace(name = "bazel_clang_tidy") + +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +maybe( + http_archive, + name = "bazel_skylib", + sha256 = "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", + url = "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", +) + +load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") + +bazel_skylib_workspace() diff --git a/clang_tidy/clang_tidy.bzl b/clang_tidy/clang_tidy.bzl index 3410083..a6bf7ef 100644 --- a/clang_tidy/clang_tidy.bzl +++ b/clang_tidy/clang_tidy.bzl @@ -205,8 +205,8 @@ 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")), - "_clang_tidy_bazel_out_includes_are_system_includes": attr.bool(default = False), - "_clang_tidy_virtual_includes_are_system_includes": attr.bool(default = False), + "_clang_tidy_bazel_out_includes_are_system_includes": attr.label(default = Label("//:clang_tidy_bazel_out_includes_are_system_includes")), + "_clang_tidy_virtual_includes_are_system_includes": attr.label(default = Label("//:clang_tidy_virtual_includes_are_system_includes")), }, toolchains = ["@bazel_tools//tools/cpp:toolchain_type"], )