From 030f781ba9fd0fee91ebc76634f7933abcf1b836 Mon Sep 17 00:00:00 2001 From: Peter Kolloch Date: Tue, 18 Jun 2024 19:02:55 +0200 Subject: [PATCH] cargo-clippy: also expose as part of the clippy tool archive --- rust/private/repository_utils.bzl | 22 ++++++++++++++-------- rust/private/toolchain_utils.bzl | 11 +++++++++++ rust/toolchain.bzl | 16 ++++++++++++++++ rust/toolchain/BUILD.bazel | 5 +++++ 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/rust/private/repository_utils.bzl b/rust/private/repository_utils.bzl index 67f1cd0aa6..15d11e6836 100644 --- a/rust/private/repository_utils.bzl +++ b/rust/private/repository_utils.bzl @@ -122,14 +122,6 @@ def BUILD_for_rustfmt(target_triple): binary_ext = system_to_binary_ext(target_triple.system), ) -_build_file_for_clippy_template = """\ -filegroup( - name = "clippy_driver_bin", - srcs = ["bin/clippy-driver{binary_ext}"], - visibility = ["//visibility:public"], -) -""" - _build_file_for_rust_analyzer_proc_macro_srv = """\ filegroup( name = "rust_analyzer_proc_macro_srv", @@ -150,6 +142,19 @@ def BUILD_for_rust_analyzer_proc_macro_srv(exec_triple): binary_ext = system_to_binary_ext(exec_triple.system), ) +_build_file_for_clippy_template = """\ +filegroup( + name = "clippy_driver_bin", + srcs = ["bin/clippy-driver{binary_ext}"], + visibility = ["//visibility:public"], +) +filegroup( + name = "cargo_clippy_bin", + srcs = ["bin/cargo-clippy{binary_ext}"], + visibility = ["//visibility:public"], +) +""" + def BUILD_for_clippy(target_triple): """Emits a BUILD file the clippy archive. @@ -244,6 +249,7 @@ rust_toolchain( rustfmt = {rustfmt_label}, cargo = "//:cargo", clippy_driver = "//:clippy_driver_bin", + cargo_clippy = "//:cargo_clippy_bin", llvm_cov = {llvm_cov_label}, llvm_profdata = {llvm_profdata_label}, rustc_lib = "//:rustc_lib", diff --git a/rust/private/toolchain_utils.bzl b/rust/private/toolchain_utils.bzl index 64f759f503..078e6f34c3 100644 --- a/rust/private/toolchain_utils.bzl +++ b/rust/private/toolchain_utils.bzl @@ -13,6 +13,16 @@ def _toolchain_files_impl(ctx): ], transitive_files = toolchain.rustc_lib, ) + elif ctx.attr.tool == "cargo-clippy": + files = depset([toolchain.cargo_clippy]) + runfiles = ctx.runfiles( + files = [ + toolchain.cargo_clippy, + toolchain.clippy_driver, + toolchain.rustc, + ], + transitive_files = toolchain.rustc_lib, + ) elif ctx.attr.tool == "clippy": files = depset([toolchain.clippy_driver]) runfiles = ctx.runfiles( @@ -60,6 +70,7 @@ toolchain_files = rule( doc = "The desired tool to get form the current rust_toolchain", values = [ "cargo", + "cargo-clippy", "clippy", "rust_lib", "rust_std", diff --git a/rust/toolchain.bzl b/rust/toolchain.bzl index b10ddb1c86..1291c5d46c 100644 --- a/rust/toolchain.bzl +++ b/rust/toolchain.bzl @@ -377,6 +377,7 @@ def _generate_sysroot( rustc_lib, cargo = None, clippy = None, + cargo_clippy = None, llvm_tools = None, rust_std = None, rustfmt = None): @@ -428,6 +429,12 @@ def _generate_sysroot( sysroot_cargo = _symlink_sysroot_bin(ctx, name, "bin", cargo) direct_files.extend([sysroot_cargo]) + # Cargo-clippy + sysroot_cargo_clippy = None + if cargo_clippy: + sysroot_cargo_clippy = _symlink_sysroot_bin(ctx, name, "bin", cargo_clippy) + direct_files.extend([sysroot_cargo_clippy]) + # Rustfmt sysroot_rustfmt = None if rustfmt: @@ -453,6 +460,7 @@ def _generate_sysroot( content = "\n".join([ "cargo: {}".format(cargo), "clippy: {}".format(clippy), + "cargo-clippy: {}".format(cargo_clippy), "llvm_tools: {}".format(llvm_tools), "rust_std: {}".format(rust_std), "rustc_lib: {}".format(rustc_lib), @@ -469,6 +477,7 @@ def _generate_sysroot( all_files = all_files, cargo = sysroot_cargo, clippy = sysroot_clippy, + cargo_clippy = sysroot_cargo_clippy, rust_std = sysroot_rust_std, rustc = sysroot_rustc, rustc_lib = sysroot_rustc_lib, @@ -529,6 +538,7 @@ def _rust_toolchain_impl(ctx): rustfmt = ctx.file.rustfmt, clippy = ctx.file.clippy_driver, cargo = ctx.file.cargo, + cargo_clippy = ctx.file.cargo_clippy, llvm_tools = ctx.attr.llvm_tools, ) @@ -631,6 +641,7 @@ def _rust_toolchain_impl(ctx): binary_ext = ctx.attr.binary_ext, cargo = sysroot.cargo, clippy_driver = sysroot.clippy, + cargo_clippy = sysroot.cargo_clippy, compilation_mode_opts = compilation_mode_opts, crosstool_files = ctx.files._cc_toolchain, default_edition = ctx.attr.default_edition, @@ -707,6 +718,11 @@ rust_toolchain = rule( allow_single_file = True, cfg = "exec", ), + "cargo_clippy": attr.label( + doc = "The location of the `cargo_clippy` binary. Can be a direct source or a filegroup containing one item.", + allow_single_file = True, + cfg = "exec", + ), "debug_info": attr.string_dict( doc = "Rustc debug info levels per opt level", default = { diff --git a/rust/toolchain/BUILD.bazel b/rust/toolchain/BUILD.bazel index b5e57af79a..c839c91364 100644 --- a/rust/toolchain/BUILD.bazel +++ b/rust/toolchain/BUILD.bazel @@ -13,6 +13,11 @@ toolchain_files( tool = "clippy", ) +toolchain_files( + name = "current_cargo_clippy_files", + tool = "cargo-clippy", +) + toolchain_files( name = "current_rustc_files", tool = "rustc",