The following are some examples of how to use Stardoc. ## Single File Suppose you have a project containing Stardoc rules you want to document: ``` [workspace]/ WORKSPACE checkstyle/ BUILD checkstyle.bzl ``` To generate documentation for the rules in `checkstyle.bzl`, add the following target to `rules/BUILD`: ```python load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") stardoc( name = "checkstyle-docs", input = "checkstyle.bzl", out = "checkstyle_doc.md", ) ``` Running `bazel build //checkstyle:checkstyle-docs` will generate a markdown file containing documentation for all Starlark rules defined in `checkstyle.bzl`. To generate a subset of rules defined in `checkstyle.bzl`, you may specify which rule names you specifically want documentation for using the `symbol_names` attribute of the `stardoc` rule. If `symbol_names` is specified, only rules matching a name in `symbol_names` will be documented: ```python load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") stardoc( name = "checkstyle-docs", input = "checkstyle.bzl", out = "checkstyle_doc.md", symbol_names = ["checkstyle_rule", "other_rule"], ) ``` ## Files with Dependencies If you would like to generate documentation for a `.bzl` with dependencies on other `.bzl` files, use the `bzl_library` rule to create logical collections of Starlark sources and depend on these libraries via the `deps` attribute of your `stardoc` target. Suppose your project has the following structure: ``` [workspace]/ WORKSPACE BUILD checkstyle/ BUILD checkstyle.bzl lua/ BUILD lua.bzl luarocks.bzl ``` ...and suppose your target `.bzl` file depends on other `.bzl` files in your workspace: `checkstyle/checkstyle.bzl`: ```python load("//lua:lua.bzl", "lua_utility") lua_utility() checkstyle_rule = rule( ... ) ``` In this case, you can have a `bzl_library` target in `lua/BUILD`: `lua/BUILD`: ```python load("@bazel_skylib//:bzl_library.bzl", "bzl_library") bzl_library( name = "lua-rules", srcs = [ "lua.bzl", "luarocks.bzl", ], ) ``` To build documentation for `checkstyle.bzl`, specify the `bzl_library` target as a dependency of the `stardoc` target: `checkstyle/BUILD`: ```python load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") stardoc( name = "checkstyle-docs", input = "checkstyle.bzl", out = "checkstyle_doc.md", deps = ["//lua:lua-rules"], ) ``` ## Multiple Files If you would like to generate documentation for multiple .bzl files in various packages in your workspace, you will need to create a single `.bzl` file that depends on all those `.bzl` files. You can then explicitly whitelist rules for which you would like documentation to be generated. For example, you may want to generate documentation for `foo_rule`, `bar_rule`, and `baz_rule`, all in different `.bzl` files. First, you would create a single `.bzl` file which loads these files: `doc_hub.bzl`: ```python load("//foo:foo.bzl", "foo_rule") load("//bar:bar.bzl", "bar_rule") load("//baz:baz.bzl", "baz_rule") # No need for any implementation here. The rules need only be loaded. ``` A single `stardoc` target can then be used to generate their documentation: `BUILD`: ```python load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") stardoc( name = "my-docs", input = "doc_hub.bzl", out = "docs.md", symbol_names = ["foo_rule", "bar_rule", "baz_rule"], ) ```