blob: ebca2dcd0b6d8442e5d9b5c67b6bf001a29feae4 [file] [log] [blame]
Brian Silvermancc09f182022-03-09 15:40:20 -08001load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
2load("@io_bazel_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",
Brian Silvermancc09f182022-03-09 15:40:20 -080011 "@com_google_protobuf//:bzl_srcs",
Brian Silverman5f6f2762022-08-13 19:30:05 -070012 "@rules_nodejs//nodejs:bzl",
Brian Silvermancc09f182022-03-09 15:40:20 -080013 ],
14 deps = [
15 "@bazel_skylib//lib:paths",
Brian Silverman5f6f2762022-08-13 19:30:05 -070016 "@bazel_skylib//lib:selects",
Brian Silvermancc09f182022-03-09 15:40:20 -080017 "@bazel_skylib//rules:common_settings",
18 "@rules_proto//proto:defs",
19 "@rules_proto//proto:repositories",
20 ],
21)
22
23bzl_library(
24 name = "all_docs",
25 deps = [
26 ":docs_deps",
27 "@rules_rust//:bzl_lib",
28 "@rules_rust//bindgen:bzl_lib",
29 "@rules_rust//cargo:bzl_lib",
30 "@rules_rust//crate_universe:bzl_lib",
31 "@rules_rust//proto:bzl_lib",
32 "@rules_rust//rust:bzl_lib",
33 "@rules_rust//wasm_bindgen:bzl_lib",
34 ],
35)
36
37PAGES = dict([
38 page(
39 name = "cargo",
40 symbols = [
41 "cargo_bootstrap_repository",
42 "cargo_build_script",
43 "cargo_env",
44 ],
45 ),
46 page(
47 name = "defs",
48 symbols = [
49 "rust_binary",
50 "rust_library",
51 "rust_static_library",
52 "rust_shared_library",
53 "rust_proc_macro",
54 "rust_test",
55 "rust_test_suite",
56 "error_format",
Brian Silverman5f6f2762022-08-13 19:30:05 -070057 "extra_rustc_flag",
Brian Silvermancc09f182022-03-09 15:40:20 -080058 "extra_rustc_flags",
59 "capture_clippy_output",
60 ],
61 ),
62 page(
63 name = "providers",
64 symbols = [
65 "CrateInfo",
66 "DepInfo",
67 "StdLibInfo",
68 ],
69 ),
70 page(
71 name = "rust_analyzer",
72 header_template = ":rust_analyzer.vm",
73 symbols = [
Brian Silvermancc09f182022-03-09 15:40:20 -080074 "rust_analyzer_aspect",
Brian Silverman5f6f2762022-08-13 19:30:05 -070075 "rust_analyzer_toolchain",
Brian Silvermancc09f182022-03-09 15:40:20 -080076 ],
77 ),
78 page(
79 name = "rust_bindgen",
Brian Silverman5f6f2762022-08-13 19:30:05 -070080 header_template = ":rust_bindgen.vm",
Brian Silvermancc09f182022-03-09 15:40:20 -080081 symbols = [
82 "rust_bindgen_library",
Brian Silverman5f6f2762022-08-13 19:30:05 -070083 "rust_bindgen_dependencies",
84 "rust_bindgen_register_toolchains",
Brian Silvermancc09f182022-03-09 15:40:20 -080085 "rust_bindgen_toolchain",
86 "rust_bindgen",
87 ],
88 ),
89 page(
90 name = "rust_clippy",
91 header_template = ":rust_clippy.vm",
92 symbols = [
93 "rust_clippy",
94 "rust_clippy_aspect",
95 ],
96 ),
97 page(
98 name = "rust_doc",
99 symbols = [
100 "rust_doc",
101 "rust_doc_test",
102 ],
103 ),
104 page(
105 name = "rust_fmt",
106 header_template = ":rust_fmt.vm",
107 symbols = [
108 "rustfmt_aspect",
109 "rustfmt_test",
110 ],
111 ),
112 page(
113 name = "rust_proto",
114 header_template = ":rust_proto.vm",
115 symbols = [
116 "rust_grpc_library",
117 "rust_proto_library",
118 "rust_proto_repositories",
119 "rust_proto_transitive_repositories",
120 "rust_proto_toolchain",
121 ],
122 ),
123 page(
124 name = "rust_repositories",
125 symbols = [
126 "rules_rust_dependencies",
127 "rust_register_toolchains",
128 "rust_repositories",
129 "rust_repository_set",
130 "rust_stdlib_filegroup",
131 "rust_toolchain_repository_proxy",
132 "rust_toolchain_repository",
Brian Silverman5f6f2762022-08-13 19:30:05 -0700133 "rust_toolchain_tools_repository",
Brian Silvermancc09f182022-03-09 15:40:20 -0800134 "rust_toolchain",
135 ],
136 ),
137 page(
138 name = "rust_wasm_bindgen",
139 header_template = ":rust_wasm_bindgen.vm",
140 symbols = [
Brian Silverman5f6f2762022-08-13 19:30:05 -0700141 "rust_wasm_bindgen_dependencies",
142 "rust_wasm_bindgen_register_toolchains",
Brian Silvermancc09f182022-03-09 15:40:20 -0800143 "rust_wasm_bindgen_toolchain",
144 "rust_wasm_bindgen",
145 ],
146 ),
147 page(
148 name = "settings",
149 symbols = [
150 "incompatible_flag",
151 "fail_when_enabled",
152 ],
153 ),
154])
155
156# Generate headers for each page
157[gen_header(page = p) for p in PAGES.values()]
158
159[
160 stardoc(
161 name = "%s_md" % k,
162 out = "%s.md" % k,
163 header_template = ":%s_gen_header_vm" % k,
164 input = ":symbols.bzl",
165 symbol_names = PAGES[k].symbols,
166 deps = [":all_docs"],
167 )
168 for k in PAGES.keys()
169]
170
171genrule(
172 name = "flatten_header_vm",
173 outs = ["flatten_header.vm"],
174 cmd = ">$@ echo '# Rust rules\n\n%s\n'" % "\n".join(
175 sorted(["* [{rule}](#{rule})".format(rule = v) for k in PAGES.keys() for v in PAGES[k].symbols]),
176 ),
177 output_to_bindir = True,
178)
179
180stardoc(
181 name = "flatten_md",
182 out = "flatten.md",
183 header_template = ":flatten_header_vm",
184 input = ":symbols.bzl",
185 symbol_names = sorted([symbol for k in PAGES.keys() for symbol in PAGES[k].symbols]),
186 deps = [":all_docs"],
187)
188
189stardoc(
190 name = "crate_universe",
191 out = "crate_universe.md",
Brian Silverman5f6f2762022-08-13 19:30:05 -0700192 input = "@rules_rust//crate_universe:docs.bzl",
Brian Silvermancc09f182022-03-09 15:40:20 -0800193 deps = [":all_docs"],
194)
195
196sh_binary(
197 name = "update_docs",
198 srcs = ["update_docs.sh"],
199)
200
201sh_binary(
202 name = "test_docs",
203 srcs = ["test_docs.sh"],
204)