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_bzl
myst_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 = ... )