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