blob: d131607c8ea9d7d230a3c23f6f741691c5cc93bd [file] [log] [blame] [view]
# 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 = ...
)
```