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