# Starlark docgen 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. ## Configuring Sphinx 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", ] ``` ## Generating docs from bzl files 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 = ... ) ```