Squashed 'third_party/rules_rust/' content from commit bf59038ca

git-subtree-dir: third_party/rules_rust
git-subtree-split: bf59038cac11798cbaef9f3bf965bad8182b97fa
Signed-off-by: Brian Silverman <bsilver16384@gmail.com>
Change-Id: I5a20e403203d670df467ea97dde9a4ac40339a8d
diff --git a/docs/BUILD.bazel b/docs/BUILD.bazel
new file mode 100644
index 0000000..6c7e39c
--- /dev/null
+++ b/docs/BUILD.bazel
@@ -0,0 +1,198 @@
+load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
+load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc")
+load("//:page.bzl", "gen_header", "page")
+
+package(default_visibility = ["//visibility:private"])
+
+bzl_library(
+    name = "docs_deps",
+    srcs = [
+        "@bazel_tools//tools:bzl_srcs",
+        "@build_bazel_rules_nodejs//:bzl",
+        "@com_google_protobuf//:bzl_srcs",
+    ],
+    deps = [
+        "@bazel_skylib//lib:paths",
+        "@bazel_skylib//rules:common_settings",
+        "@rules_proto//proto:defs",
+        "@rules_proto//proto:repositories",
+    ],
+)
+
+bzl_library(
+    name = "all_docs",
+    deps = [
+        ":docs_deps",
+        "@rules_rust//:bzl_lib",
+        "@rules_rust//bindgen:bzl_lib",
+        "@rules_rust//cargo:bzl_lib",
+        "@rules_rust//crate_universe:bzl_lib",
+        "@rules_rust//proto:bzl_lib",
+        "@rules_rust//rust:bzl_lib",
+        "@rules_rust//wasm_bindgen:bzl_lib",
+    ],
+)
+
+PAGES = dict([
+    page(
+        name = "cargo",
+        symbols = [
+            "cargo_bootstrap_repository",
+            "cargo_build_script",
+            "cargo_env",
+        ],
+    ),
+    page(
+        name = "defs",
+        symbols = [
+            "rust_binary",
+            "rust_library",
+            "rust_static_library",
+            "rust_shared_library",
+            "rust_proc_macro",
+            "rust_test",
+            "rust_test_suite",
+            "error_format",
+            "extra_rustc_flags",
+            "capture_clippy_output",
+        ],
+    ),
+    page(
+        name = "providers",
+        symbols = [
+            "CrateInfo",
+            "DepInfo",
+            "StdLibInfo",
+        ],
+    ),
+    page(
+        name = "rust_analyzer",
+        header_template = ":rust_analyzer.vm",
+        symbols = [
+            "rust_analyzer",
+            "rust_analyzer_aspect",
+        ],
+    ),
+    page(
+        name = "rust_bindgen",
+        symbols = [
+            "rust_bindgen_library",
+            "rust_bindgen_repositories",
+            "rust_bindgen_toolchain",
+            "rust_bindgen",
+        ],
+    ),
+    page(
+        name = "rust_clippy",
+        header_template = ":rust_clippy.vm",
+        symbols = [
+            "rust_clippy",
+            "rust_clippy_aspect",
+        ],
+    ),
+    page(
+        name = "rust_doc",
+        symbols = [
+            "rust_doc",
+            "rust_doc_test",
+        ],
+    ),
+    page(
+        name = "rust_fmt",
+        header_template = ":rust_fmt.vm",
+        symbols = [
+            "rustfmt_aspect",
+            "rustfmt_test",
+        ],
+    ),
+    page(
+        name = "rust_proto",
+        header_template = ":rust_proto.vm",
+        symbols = [
+            "rust_grpc_library",
+            "rust_proto_library",
+            "rust_proto_repositories",
+            "rust_proto_transitive_repositories",
+            "rust_proto_toolchain",
+        ],
+    ),
+    page(
+        name = "rust_repositories",
+        symbols = [
+            "rules_rust_dependencies",
+            "rust_register_toolchains",
+            "rust_repositories",
+            "rust_repository_set",
+            "rust_stdlib_filegroup",
+            "rust_toolchain_repository_proxy",
+            "rust_toolchain_repository",
+            "rust_toolchain",
+        ],
+    ),
+    page(
+        name = "rust_wasm_bindgen",
+        header_template = ":rust_wasm_bindgen.vm",
+        symbols = [
+            "rust_wasm_bindgen_repositories",
+            "rust_wasm_bindgen_toolchain",
+            "rust_wasm_bindgen",
+        ],
+    ),
+    page(
+        name = "settings",
+        symbols = [
+            "incompatible_flag",
+            "fail_when_enabled",
+        ],
+    ),
+])
+
+# Generate headers for each page
+[gen_header(page = p) for p in PAGES.values()]
+
+[
+    stardoc(
+        name = "%s_md" % k,
+        out = "%s.md" % k,
+        header_template = ":%s_gen_header_vm" % k,
+        input = ":symbols.bzl",
+        symbol_names = PAGES[k].symbols,
+        deps = [":all_docs"],
+    )
+    for k in PAGES.keys()
+]
+
+genrule(
+    name = "flatten_header_vm",
+    outs = ["flatten_header.vm"],
+    cmd = ">$@ echo '# Rust rules\n\n%s\n'" % "\n".join(
+        sorted(["* [{rule}](#{rule})".format(rule = v) for k in PAGES.keys() for v in PAGES[k].symbols]),
+    ),
+    output_to_bindir = True,
+)
+
+stardoc(
+    name = "flatten_md",
+    out = "flatten.md",
+    header_template = ":flatten_header_vm",
+    input = ":symbols.bzl",
+    symbol_names = sorted([symbol for k in PAGES.keys() for symbol in PAGES[k].symbols]),
+    deps = [":all_docs"],
+)
+
+stardoc(
+    name = "crate_universe",
+    out = "crate_universe.md",
+    input = "@rules_rust//crate_universe:defs.bzl",
+    deps = [":all_docs"],
+)
+
+sh_binary(
+    name = "update_docs",
+    srcs = ["update_docs.sh"],
+)
+
+sh_binary(
+    name = "test_docs",
+    srcs = ["test_docs.sh"],
+)