Using the sphinx_stardoc rule, API documentation can be generated from bzl source code. This rule requires both MyST-based markdown and the sphinx_bzl Sphinx extension are enabled. This allows source code to use Markdown and Sphinx syntax to create rich documentation with cross references, types, and more.
While the sphinx_stardoc rule doesn't require Sphinx itself, the source it generates requires some additional Sphinx plugins and config settings.
When defining the sphinx_build_binary target, also depend on:
@rules_python//sphinxdocs/src/sphinx_bzl:sphinx_bzlmyst_parser (e.g. @pypi//myst_parser)typing_extensions (e.g. @pypi//myst_parser)sphinx_build_binary(
name = "sphinx-build",
deps = [
"@rules_python//sphinxdocs/src/sphinx_bzl",
"@pypi//myst_parser",
"@pypi//typing_extensions",
...
]
)
In conf.py, enable the sphinx_bzl extension, myst_parser extension, and the colon_fence MyST extension.
extensions = [
"myst_parser",
"sphinx_bzl.bzl",
]
myst_enable_extensions = [
"colon_fence",
]
To convert the bzl code to Sphinx doc sources, sphinx_stardocs is the primary rule to do so. It takes a list of bzl_library targets or files and generates docs for each. When a bzl_library target is passed, the bzl_library.srcs value can only have a single file.
Example:
sphinx_stardocs(
name = "my_docs",
srcs = [
":binary_bzl",
":library_bzl",
]
)
bzl_library(
name = "binary_bzl",
srcs = ["binary.bzl"],
deps = ...
)
bzl_library(
name = "library_bzl",
srcs = ["library.bzl"],
deps = ...
)