From 0cf23b92126dc2ae07f1a2e065d9747992275fde Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Fri, 13 Jun 2025 14:50:44 +0200 Subject: Add lint target for iwyu Co-authored-by: Maksim Denisov Co-authored-by: Paul Cristian Sarbu --- lint/iwyu-mapping.imp | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 lint/iwyu-mapping.imp (limited to 'lint/iwyu-mapping.imp') diff --git a/lint/iwyu-mapping.imp b/lint/iwyu-mapping.imp new file mode 100644 index 00000000..4c36bb59 --- /dev/null +++ b/lint/iwyu-mapping.imp @@ -0,0 +1,126 @@ +# Mapping file for include-what-you-use. +# Check rules at: https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md + +# Take into account that the order in which entries are given for the same +# symbol is important. +# For instance for grpc::Status has a higher priority: +# { "symbol": [ "grpc::Status", "private", "", "public"] }, +# { "symbol": [ "grpc::Status", "private", "", "public"] }, +[ + # Map C headers + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + + # Hide std implementation details headers: + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + + # Map symbols: + { "symbol": ["timespec", "private", "", "public"] }, + { "symbol": ["tm", "private", "", "public"] }, + { "symbol": ["AT_FDCWD", "private", "", "public"] }, + { "symbol": ["SEEK_END", "private", , "public"] }, + { "symbol": ["SEEK_SET", "private", , "public"] }, + { "symbol": ["pid_t", "private", , "public"] }, + { "symbol": ["std::size_t", "private", "", "public"] }, + { "symbol": ["size_t", "private", "", "public"] }, + { "symbol": ["std::nullptr_t", "private", "", "public"] }, + { "symbol": ["std::ptrdiff_t", "private", "", "public"] }, + { "symbol": ["FILE", "private", "", "public"] }, + { "symbol": ["NULL", "private", "", "public"] }, + { "symbol": ["std::thread::id", "private", "", "public"] }, + { "symbol": ["uint", "private", "", "public"] }, + { "symbol": ["std::uint", "private", "", "public"] }, + { "symbol": ["std::hash", "private", "", "public"] }, + + # Trick to "ignore" std::allocator and similar types we don't want to + # include manually. Taken from: + # https://github.com/include-what-you-use/include-what-you-use/blob/d2d092919f2774b5463e236e1ee9d56fb46ceb60/gcc.symbols.imp + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + { "symbol": [ "std::allocator", "private", "", "public"] }, + + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + { "symbol": [ "std::char_traits", "private", "", "public"] }, + + { "include": ["", "public", "", "public"] }, + + # Model the dependencies between the public standard stream headers, + # in order to include only the top-most library. + # Taken from: + # https://github.com/include-what-you-use/include-what-you-use/blob/377eaef70cdda47368939f4d9beabfabe3f628f0/iwyu_include_picker.cc#L623 + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public" ] }, + { "include": [ "", "public", "", "public"] }, + + # Use common headers for third-parties: + { "include": ["@\"gsl/.*\"", "private", "\"gsl/gsl\"", "public"] }, + { "include": ["@\"nlohmann/.*\"", "private", "\"nlohmann/json.hpp\"", "public"] }, + + # "git2/XXX.h" => where XXX doesn't contain '/' + { "include": ["@\"git2/[^/]+\\.h\"", "private", "", "public"] }, + + # "fmt/core.h" is for compatibility reasons; otherwise, include the suggested + # headers if they don't break the pkg build + { "include": ["\"fmt/format.h\"", "private", "\"fmt/core.h\"", "public"] }, + { "include": ["\"fmt/base.h\"", "private", "\"fmt/core.h\"", "public"] }, + + { "include": ["@\"catch2/matchers/.*\"", "private", "\"catch2/matchers/catch_matchers_all.hpp\"", "public"] }, + { "include": ["@\"catch2/generators/.*\"", "private", "\"catch2/generators/catch_generators_all.hpp\"", "public"] }, + + # For compatibility reasons map all openssl headers to sha.h + { "include": ["@\"openssl/.*\"", "private", "\"openssl/sha.h\"", "public"] }, + + # GRPC: + { "include": ["@\"grpcpp/.*\"", "private", "", "public"] }, + { "include": ["@", "private", "", "public"] }, + { "symbol": [ "grpc::Status", "private", "", "public"] }, + { "symbol": [ "grpc::Status", "private", "", "public"] }, + + # bazel Digest should be included via our bazel_types header: + { "include": + [ "\"build/bazel/remote/execution/v2/remote_execution.pb.h\"", "private" + , "\"src/buildtool/common/bazel_types.hpp\"", "public" ] }, + # bazel_re namespace alias should also come from the bazel_types header: + { "symbol": ["bazel_re", "private", "\"src/buildtool/common/bazel_types.hpp\"", "public"] }, +] -- cgit v1.2.3