xref: /aosp_15_r20/external/bazelbuild-rules_rust/docs/BUILD.bazel (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
2load("@stardoc//stardoc:stardoc.bzl", "stardoc")
3load("//:page.bzl", "gen_header", "page")
4
5package(default_visibility = ["//visibility:private"])
6
7bzl_library(
8    name = "docs_deps",
9    srcs = [
10        "@bazel_tools//tools:bzl_srcs",
11        "@com_google_protobuf//:bzl_srcs",
12    ],
13    deps = [
14        "@bazel_features//:deps",
15        "@bazel_features//:features",
16        "@bazel_skylib//lib:paths",
17        "@bazel_skylib//lib:selects",
18        "@bazel_skylib//lib:structs",
19        "@bazel_skylib//rules:common_settings",
20        "@rules_proto//proto:defs",
21        "@rules_proto//proto:repositories",
22    ],
23)
24
25bzl_library(
26    name = "all_docs",
27    deps = [
28        ":docs_deps",
29        "@rules_rust//:bzl_lib",
30        "@rules_rust//bindgen:bzl_lib",
31        "@rules_rust//cargo:bzl_lib",
32        "@rules_rust//crate_universe:bzl_lib",
33        "@rules_rust//crate_universe/private/module_extensions:bzl_lib",
34        "@rules_rust//proto:bzl_lib",
35        "@rules_rust//rust:bzl_lib",
36        "@rules_rust//wasm_bindgen:bzl_lib",
37    ],
38)
39
40PAGES = dict([
41    page(
42        name = "cargo",
43        symbols = [
44            "cargo_bootstrap_repository",
45            "cargo_build_script",
46            "cargo_dep_env",
47            "cargo_env",
48        ],
49    ),
50    page(
51        name = "defs",
52        symbols = [
53            "rust_binary",
54            "rust_library",
55            "rust_library_group",
56            "rust_static_library",
57            "rust_shared_library",
58            "rust_proc_macro",
59            "rust_test",
60            "rust_test_suite",
61            "error_format",
62            "extra_rustc_flag",
63            "extra_rustc_flags",
64            "capture_clippy_output",
65        ],
66    ),
67    page(
68        name = "providers",
69        symbols = [
70            "CrateInfo",
71            "DepInfo",
72            "StdLibInfo",
73        ],
74    ),
75    page(
76        name = "rust_analyzer",
77        header_template = ":rust_analyzer.vm",
78        symbols = [
79            "rust_analyzer_aspect",
80            "rust_analyzer_toolchain",
81        ],
82    ),
83    page(
84        name = "rust_bindgen",
85        header_template = ":rust_bindgen.vm",
86        symbols = [
87            "rust_bindgen_library",
88            "rust_bindgen",
89            "rust_bindgen_toolchain",
90            "rust_bindgen_dependencies",
91            "rust_bindgen_register_toolchains",
92        ],
93    ),
94    page(
95        name = "rust_clippy",
96        header_template = ":rust_clippy.vm",
97        symbols = [
98            "rust_clippy",
99            "rust_clippy_aspect",
100        ],
101    ),
102    page(
103        name = "rust_doc",
104        symbols = [
105            "rust_doc",
106            "rust_doc_test",
107        ],
108    ),
109    page(
110        name = "rust_fmt",
111        header_template = ":rust_fmt.vm",
112        symbols = [
113            "rustfmt_aspect",
114            "rustfmt_test",
115            "rustfmt_toolchain",
116        ],
117    ),
118    page(
119        name = "rust_proto",
120        header_template = ":rust_proto.vm",
121        symbols = [
122            "rust_prost_library",
123            "rust_prost_toolchain",
124            "rust_prost_dependencies",
125            "rust_prost_transitive_repositories",
126        ] + [
127            "rust_proto_library",
128            "rust_grpc_library",
129            "rust_proto_protobuf_toolchain",
130            "rust_proto_protobuf_dependencies",
131            "rust_proto_protobuf_register_toolchains",
132            "rust_proto_protobuf_transitive_repositories",
133        ],
134    ),
135    page(
136        name = "rust_repositories",
137        symbols = [
138            "rules_rust_dependencies",
139            "rust_analyzer_toolchain_repository",
140            "rust_register_toolchains",
141            "rust_repositories",
142            "rust_repository_set",
143            "rust_stdlib_filegroup",
144            "rust_toolchain_repository_proxy",
145            "rust_toolchain_repository",
146            "rust_toolchain_tools_repository",
147            "rust_toolchain",
148        ],
149    ),
150    page(
151        name = "rust_wasm_bindgen",
152        header_template = ":rust_wasm_bindgen.vm",
153        symbols = [
154            "rust_wasm_bindgen_dependencies",
155            "rust_wasm_bindgen_register_toolchains",
156            "rust_wasm_bindgen_toolchain",
157            "rust_wasm_bindgen",
158            "RustWasmBindgenInfo",
159        ],
160    ),
161    page(
162        name = "settings",
163        symbols = [
164            "incompatible_flag",
165            "fail_when_enabled",
166        ],
167    ),
168])
169
170# Generate headers for each page
171[gen_header(page = p) for p in PAGES.values()]
172
173[
174    stardoc(
175        name = "%s_md" % k,
176        out = "%s.md" % k,
177        header_template = ":%s_gen_header_vm" % k,
178        input = ":symbols.bzl",
179        symbol_names = PAGES[k].symbols,
180        deps = [":all_docs"],
181    )
182    for k in PAGES.keys()
183]
184
185genrule(
186    name = "flatten_header_vm",
187    outs = ["flatten_header.vm"],
188    cmd = ">$@ echo '# Rust rules\n\n%s\n'" % "\n".join(
189        sorted(["* [{rule}](#{rule})".format(rule = v) for k in PAGES.keys() for v in PAGES[k].symbols]),
190    ),
191    output_to_bindir = True,
192)
193
194stardoc(
195    name = "flatten_md",
196    out = "flatten.md",
197    header_template = ":flatten_header_vm",
198    input = ":symbols.bzl",
199    symbol_names = sorted([symbol for k in PAGES.keys() for symbol in PAGES[k].symbols]),
200    deps = [":all_docs"],
201)
202
203stardoc(
204    name = "crate_universe_workspace",
205    out = "crate_universe.md",
206    input = "@rules_rust//crate_universe:docs_workspace.bzl",
207    deps = [":all_docs"],
208)
209
210stardoc(
211    name = "crate_universe_bzlmod",
212    out = "crate_universe_bzlmod.md",
213    input = "@rules_rust//crate_universe:docs_bzlmod.bzl",
214    deps = [":all_docs"],
215)
216
217sh_binary(
218    name = "update_docs",
219    srcs = ["update_docs.sh"],
220)
221
222sh_binary(
223    name = "test_docs",
224    srcs = ["test_docs.sh"],
225)
226