1*b2fa4294SXin Li<nav class="toc"> 2*b2fa4294SXin Li <h2>Contents</h2> 3*b2fa4294SXin Li <ul> 4*b2fa4294SXin Li <li><a href="#single-file">Single File</a></li> 5*b2fa4294SXin Li <li><a href="#files-with-deps">Files with Dependencies</a></li> 6*b2fa4294SXin Li <li><a href="#multiple-files">Multiple Files</a></li> 7*b2fa4294SXin Li </ul> 8*b2fa4294SXin Li</nav> 9*b2fa4294SXin Li 10*b2fa4294SXin LiThe following are some examples of how to use Stardoc. 11*b2fa4294SXin Li 12*b2fa4294SXin Li<a name="single-file"></a> 13*b2fa4294SXin Li## Single File 14*b2fa4294SXin Li 15*b2fa4294SXin LiSuppose you have a project containing Stardoc rules you want to document: 16*b2fa4294SXin Li 17*b2fa4294SXin Li``` 18*b2fa4294SXin Li[workspace]/ 19*b2fa4294SXin Li WORKSPACE 20*b2fa4294SXin Li checkstyle/ 21*b2fa4294SXin Li BUILD 22*b2fa4294SXin Li checkstyle.bzl 23*b2fa4294SXin Li``` 24*b2fa4294SXin Li 25*b2fa4294SXin LiTo generate documentation for the rules in `checkstyle.bzl`, add the 26*b2fa4294SXin Lifollowing target to `rules/BUILD`: 27*b2fa4294SXin Li 28*b2fa4294SXin Li```python 29*b2fa4294SXin Liload("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") 30*b2fa4294SXin Li 31*b2fa4294SXin Listardoc( 32*b2fa4294SXin Li name = "checkstyle-docs", 33*b2fa4294SXin Li input = "checkstyle.bzl", 34*b2fa4294SXin Li out = "checkstyle_doc.md", 35*b2fa4294SXin Li) 36*b2fa4294SXin Li``` 37*b2fa4294SXin Li 38*b2fa4294SXin LiRunning `bazel build //checkstyle:checkstyle-docs` will generate a markdown file 39*b2fa4294SXin Licontaining documentation for all Starlark rules defined in `checkstyle.bzl`. 40*b2fa4294SXin Li 41*b2fa4294SXin LiTo generate a subset of rules defined in `checkstyle.bzl`, you may specify which 42*b2fa4294SXin Lirule names you specifically want documentation for using the `symbol_names` attribute 43*b2fa4294SXin Liof the `stardoc` rule. If `symbol_names` is specified, only rules matching a name 44*b2fa4294SXin Liin `symbol_names` will be documented: 45*b2fa4294SXin Li 46*b2fa4294SXin Li```python 47*b2fa4294SXin Liload("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") 48*b2fa4294SXin Li 49*b2fa4294SXin Listardoc( 50*b2fa4294SXin Li name = "checkstyle-docs", 51*b2fa4294SXin Li input = "checkstyle.bzl", 52*b2fa4294SXin Li out = "checkstyle_doc.md", 53*b2fa4294SXin Li symbol_names = ["checkstyle_rule", "other_rule"], 54*b2fa4294SXin Li) 55*b2fa4294SXin Li``` 56*b2fa4294SXin Li 57*b2fa4294SXin Li<a name="files-with-deps"></a> 58*b2fa4294SXin Li## Files with Dependencies 59*b2fa4294SXin Li 60*b2fa4294SXin LiIf you would like to generate documentation for a `.bzl` with dependencies on 61*b2fa4294SXin Liother `.bzl` files, use the `bzl_library` rule to create logical collections of 62*b2fa4294SXin LiStarlark sources and depend on these libraries via the `deps` attribute of your 63*b2fa4294SXin Li`stardoc` target. 64*b2fa4294SXin Li 65*b2fa4294SXin LiSuppose your project has the following structure: 66*b2fa4294SXin Li 67*b2fa4294SXin Li``` 68*b2fa4294SXin Li[workspace]/ 69*b2fa4294SXin Li WORKSPACE 70*b2fa4294SXin Li BUILD 71*b2fa4294SXin Li checkstyle/ 72*b2fa4294SXin Li BUILD 73*b2fa4294SXin Li checkstyle.bzl 74*b2fa4294SXin Li lua/ 75*b2fa4294SXin Li BUILD 76*b2fa4294SXin Li lua.bzl 77*b2fa4294SXin Li luarocks.bzl 78*b2fa4294SXin Li``` 79*b2fa4294SXin Li 80*b2fa4294SXin Li...and suppose your target `.bzl` file depends on other `.bzl` files in your workspace: 81*b2fa4294SXin Li 82*b2fa4294SXin Li`checkstyle/checkstyle.bzl`: 83*b2fa4294SXin Li 84*b2fa4294SXin Li```python 85*b2fa4294SXin Liload("//lua:lua.bzl", "lua_utility") 86*b2fa4294SXin Li 87*b2fa4294SXin Lilua_utility() 88*b2fa4294SXin Li 89*b2fa4294SXin Licheckstyle_rule = rule( 90*b2fa4294SXin Li ... 91*b2fa4294SXin Li) 92*b2fa4294SXin Li``` 93*b2fa4294SXin Li 94*b2fa4294SXin LiIn this case, you can have a `bzl_library` target in `lua/BUILD`: 95*b2fa4294SXin Li 96*b2fa4294SXin Li`lua/BUILD`: 97*b2fa4294SXin Li 98*b2fa4294SXin Li```python 99*b2fa4294SXin Liload("@bazel_skylib//:bzl_library.bzl", "bzl_library") 100*b2fa4294SXin Li 101*b2fa4294SXin Libzl_library( 102*b2fa4294SXin Li name = "lua-rules", 103*b2fa4294SXin Li srcs = [ 104*b2fa4294SXin Li "lua.bzl", 105*b2fa4294SXin Li "luarocks.bzl", 106*b2fa4294SXin Li ], 107*b2fa4294SXin Li) 108*b2fa4294SXin Li``` 109*b2fa4294SXin Li 110*b2fa4294SXin LiTo build documentation for `checkstyle.bzl`, specify the `bzl_library` target 111*b2fa4294SXin Lias a dependency of the `stardoc` target: 112*b2fa4294SXin Li 113*b2fa4294SXin Li`checkstyle/BUILD`: 114*b2fa4294SXin Li 115*b2fa4294SXin Li```python 116*b2fa4294SXin Liload("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") 117*b2fa4294SXin Li 118*b2fa4294SXin Listardoc( 119*b2fa4294SXin Li name = "checkstyle-docs", 120*b2fa4294SXin Li input = "checkstyle.bzl", 121*b2fa4294SXin Li out = "checkstyle_doc.md", 122*b2fa4294SXin Li deps = ["//lua:lua-rules"], 123*b2fa4294SXin Li) 124*b2fa4294SXin Li``` 125*b2fa4294SXin Li 126*b2fa4294SXin Li<a name="multiple-files"></a> 127*b2fa4294SXin Li## Multiple Files 128*b2fa4294SXin Li 129*b2fa4294SXin LiIf you would like to generate documentation for multiple .bzl files in various 130*b2fa4294SXin Lipackages in your workspace, you will need to create a single `.bzl` file that depends 131*b2fa4294SXin Lion all those `.bzl` files. You can then explicitly whitelist rules for which you would 132*b2fa4294SXin Lilike documentation to be generated. 133*b2fa4294SXin Li 134*b2fa4294SXin LiFor example, you may want to generate documentation for `foo_rule`, `bar_rule`, and 135*b2fa4294SXin Li`baz_rule`, all in different `.bzl` files. First, you would create a single `.bzl` file 136*b2fa4294SXin Liwhich loads these files and binds the rules to be documented as globals: 137*b2fa4294SXin Li 138*b2fa4294SXin Li`doc_hub.bzl`: 139*b2fa4294SXin Li 140*b2fa4294SXin Li```python 141*b2fa4294SXin Liload("//foo:foo.bzl", _foo_rule = "foo_rule") 142*b2fa4294SXin Liload("//bar:bar.bzl", _bar_rule = "bar_rule") 143*b2fa4294SXin Liload("//baz:baz.bzl", _baz_rule = "baz_rule") 144*b2fa4294SXin Li 145*b2fa4294SXin Lifoo_rule = _foo_rule 146*b2fa4294SXin Libar_rule = _bar_rule 147*b2fa4294SXin Libaz_rule = _baz_rule 148*b2fa4294SXin Li 149*b2fa4294SXin Li# No need for any implementation here. The rules need only be loaded. 150*b2fa4294SXin Li``` 151*b2fa4294SXin Li 152*b2fa4294SXin LiA single `stardoc` target can then be used to generate their documentation: 153*b2fa4294SXin Li 154*b2fa4294SXin Li`BUILD`: 155*b2fa4294SXin Li 156*b2fa4294SXin Li```python 157*b2fa4294SXin Liload("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") 158*b2fa4294SXin Li 159*b2fa4294SXin Listardoc( 160*b2fa4294SXin Li name = "my-docs", 161*b2fa4294SXin Li input = "doc_hub.bzl", 162*b2fa4294SXin Li out = "docs.md", 163*b2fa4294SXin Li symbol_names = ["foo_rule", "bar_rule", "baz_rule"], 164*b2fa4294SXin Li) 165*b2fa4294SXin Li``` 166*b2fa4294SXin Li 167*b2fa4294SXin Li 168