Fidldoc is a command-line tool that generates reference pages based on FIDL JSON IR.

# Build
1. Include fidldoc by adding a direct or indirect reference to it in your `fx set` (e.g. `fx set core.x64 --with //tools/fidl/fidldoc`)
1. Build with `fx build tools/fidl/fidldoc:fidldoc`

# Run
1. Run with a single file `fx fidldoc fuchsia-device.fidl.json`
1. Run with a list of files `fx fidldoc json/*`

By default, docs will be generated in `./docs/`. You can change that by specifying the `--output` (or `-o`) command-line flag.
Use the `--template` (or `-t`) flag to select the output format. Currently, the two supported values are `markdown` and `html`.

Additional configurations can be provided in a `fidldoc.config.json` file and passed as part of the command
line interface.

Example:

```
fx fidldoc -v \
    ./out/x64/fidling/gen/zircon/system/fidl/fuchsia-mem/fuchsia-mem.fidl.json \
    -c ./out/default/host_x64/fidldoc.config.json
```

The `all_fidl_json.txt` file provides a list of file locations to all of the FIDL JSON IR files that
are part of the Fuchsia build. You can use this file to generate all of the reference docs.
The snippet below shows an example of how to do it:

```
FIDL_PATHS=$(cat ./out/default/all_fidl_json.txt | sed -e 's/^/.\/out\/default\//')
fx fidldoc -v $(echo $FIDL_PATHS)
```

You can optionally pass a `--tag` flag to specify a source definition.

Example - How to use the `--tag` flag to point to the current git commit or branch:

```
fx fidldoc -v \
    ./out/x64/fidling/gen/zircon/system/fidl/fuchsia-mem/fuchsia-mem.fidl.json \
    -c ./out/default/host_x64/fidldoc.config.json \
    --tag $(git rev-parse HEAD)
```

# Test
The `tests` target will generate a unit test binary in the build output directory.

1. Set the test target `fx set core.x64 --with //tools/fidl/fidldoc:tests`
1. Run with `fx test fidldoc_bin_test`

# Goldens
The test `golden_test` uses `.json.golden` files from `//zircon/tools/fidl/goldens`
as input, and compares the generated output with the goldens from `src/templates/markdown/testdata`.

To regenerate the goldens run:

```
REGENERATE_GOLDENS_FOLDER=$FOLDER fx test fidldoc_bin_test -- golden_test
```