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