Skip to content

Commit ad326a8

Browse files
committed
Default lint config
1 parent d8466b7 commit ad326a8

9 files changed

Lines changed: 98 additions & 10 deletions

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use_repo(
3030
toolchains,
3131
"default_rust_toolchains",
3232
"rs_rust_host_tools",
33+
"rules_rs_default_lint_config",
3334
)
3435

3536
[
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""Repository that exposes the toolchain-default lint_config for rules_rs."""
2+
3+
def _default_lint_config_repository_impl(rctx):
4+
if rctx.attr.lint_config:
5+
rctx.file(
6+
"BUILD.bazel",
7+
"""\
8+
alias(
9+
name = "default",
10+
actual = {actual},
11+
visibility = ["//visibility:public"],
12+
)
13+
""".format(actual = repr(rctx.attr.lint_config)),
14+
)
15+
else:
16+
rctx.file(
17+
"BUILD.bazel",
18+
"""\
19+
load("@rules_rs//rs/private:cargo_lints.bzl", "cargo_lints")
20+
21+
cargo_lints(
22+
name = "default",
23+
visibility = ["//visibility:public"],
24+
)
25+
""",
26+
)
27+
28+
return rctx.repo_metadata(reproducible = True)
29+
30+
default_lint_config_repository = repository_rule(
31+
implementation = _default_lint_config_repository_impl,
32+
attrs = {
33+
"lint_config": attr.string(),
34+
},
35+
)

rs/rust_binary.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_binary = "rust_binary")
22

3-
rust_binary = _rust_binary
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_binary(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_binary(name = name, **kwargs)

rs/rust_library.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_library = "rust_library")
22

3-
rust_library = _rust_library
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_library(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_library(name = name, **kwargs)

rs/rust_proc_macro.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_proc_macro = "rust_proc_macro")
22

3-
rust_proc_macro = _rust_proc_macro
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_proc_macro(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_proc_macro(name = name, **kwargs)

rs/rust_shared_library.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_shared_library = "rust_shared_library")
22

3-
rust_shared_library = _rust_shared_library
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_shared_library(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_shared_library(name = name, **kwargs)

rs/rust_static_library.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_static_library = "rust_static_library")
22

3-
rust_static_library = _rust_static_library
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_static_library(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_static_library(name = name, **kwargs)

rs/rust_test.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
load("@rules_rust//rust:defs.bzl", _rust_test = "rust_test")
22

3-
rust_test = _rust_test
3+
_DEFAULT_LINT_CONFIG = Label("@rules_rs_default_lint_config//:default")
4+
5+
def rust_test(name, **kwargs):
6+
if "lint_config" not in kwargs:
7+
kwargs["lint_config"] = _DEFAULT_LINT_CONFIG
8+
_rust_test(name = name, **kwargs)

rs/toolchains/module_extension.bzl

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ load("//rs/experimental/miri/private:miri_repository.bzl", "miri_repository")
1111
load("//rs/platforms:triples.bzl", "SUPPORTED_EXEC_TRIPLES", "SUPPORTED_TIER_1_AND_2_TRIPLES")
1212
load("//rs/private:cargo_repository.bzl", "cargo_repository")
1313
load("//rs/private:clippy_repository.bzl", "clippy_repository")
14+
load("//rs/private:default_lint_config_repository.bzl", "default_lint_config_repository")
1415
load("//rs/private:host_tools_repository.bzl", "host_tools_repository")
1516
load("//rs/private:rust_analyzer_repository.bzl", "rust_analyzer_repository")
1617
load("//rs/private:rust_src_repository.bzl", "rust_src_repository")
@@ -84,6 +85,11 @@ _TOOLCHAIN_TAG = tag_class(
8485
doc = "Default edition to apply to toolchains.",
8586
default = _DEFAULT_EDITION,
8687
),
88+
"default_lint_config": attr.label(
89+
doc = "Default lint_config label applied to rules_rs Rust targets " +
90+
"when they don't set lint_config explicitly. Should refer to " +
91+
"a target providing LintsInfo (e.g. @crates//:cargo_lints).",
92+
),
8793
"extra_rustc_flags": attr.string_list_dict(
8894
doc = "Additional rustc flags by target triple.",
8995
),
@@ -154,9 +160,17 @@ def _toolchains_impl(mctx):
154160

155161
version_tags = []
156162
had_tags = True
163+
root_default_lint_config = None
157164
for mod in mctx.modules:
158165
for tag in mod.tags.toolchain:
159166
version_tags.append(tag)
167+
if mod.is_root and tag.default_lint_config:
168+
if root_default_lint_config and root_default_lint_config != tag.default_lint_config:
169+
fail(
170+
"Conflicting default_lint_config values on root module toolchain tags: " +
171+
"{} vs {}".format(root_default_lint_config, tag.default_lint_config),
172+
)
173+
root_default_lint_config = tag.default_lint_config
160174

161175
if not version_tags:
162176
had_tags = False
@@ -166,6 +180,7 @@ def _toolchains_impl(mctx):
166180
rustfmt_version = "",
167181
rust_analyzer_version = "",
168182
edition = _DEFAULT_EDITION,
183+
default_lint_config = None,
169184
extra_rustc_flags = {},
170185
extra_exec_rustc_flags = {},
171186
))
@@ -417,10 +432,17 @@ def _toolchains_impl(mctx):
417432
host_cargo = host_cargo,
418433
)
419434

420-
# `rs_rust_host_tools` is an implementation detail of rules_rs itself.
421-
# Report it as a direct dependency only for the rules_rs root module so
422-
# user modules are not asked to import it.
423-
direct_deps = ["rs_rust_host_tools"] if root_module_name == "rules_rs" else []
435+
default_lint_config_repository(
436+
name = "rules_rs_default_lint_config",
437+
lint_config = str(root_default_lint_config) if root_default_lint_config else "",
438+
)
439+
440+
# `rs_rust_host_tools` and `rules_rs_default_lint_config` are implementation
441+
# details of rules_rs itself. Report them as direct dependencies only for the
442+
# rules_rs root module so user modules are not asked to import them.
443+
direct_deps = (
444+
["rs_rust_host_tools", "rules_rs_default_lint_config"] if root_module_name == "rules_rs" else []
445+
)
424446
direct_dev_deps = []
425447
repo_configs = {}
426448
for tag in version_tags:

0 commit comments

Comments
 (0)