blob: 84cdd287e56768897f3e5dfb0aaaf3f4f567637c [file] [log] [blame] [view] [edit]
# summarize
The `summarize` library is used to produce an API summary of a FIDL library.
The information is extracted from the [FIDL intermediate
representation][fidlir] (IR) abstract syntax tree.
## Use
Here is an example that includes the library into another go library, which is
then rolled into a binary.
```
go_library("gopkg") {
name = "main"
sources = [ "main.go" ]
deps = [
"//tools/fidl/lib/fidlgen",
"//tools/fidl/lib/summarize:gopkg",
]
}
go_binary("fidl_api_summarize") {
gopackage = "main"
deps = [ ":gopkg" ]
}
```
Then, you can refer to the functionality as:
```
import (
// ...
"go.fuchsia.dev/fuchsia/tools/fidl/lib/fidlgen"
"go.fuchsia.dev/fuchsia/tools/fidl/lib/summarize"
)
func main() {
// This is an incomplete code fragment: you will need to initialize in and w
// properly.
var (
// in needs to be properly initialized. The reader must yield the FIDL IR
// you want to analyze encoded as JSON text.
in io.Reader
// w is where the API summary output is to be written. Needs to be properly
// initialized.
w io.Writer
// root is the root of the FIDL IR AST.
root fidlgen.Root
)
root, err := fidlgen.DecodeJSONIr(in)
if err != nil {
fmt.Fprintf(os.Stderr, "Could not parse FIDL IR from: %v: %v", *in, err)
os.Exit(1)
}
if err := summarize.Write(root, w); err != nil {
fmt.Fprintf(os.Stderr, "While summarizing %v into %v: %v", *in, *out, err)
os.Exit(1)
}
}
```
## API usage hints
The two main functions offered by the library are `summarize.Write`, which
will write out an API summary in text format to a writer, and
`summarize.Elements` which yields a sequence of API elements for further
analysis.
## Compile
```
fx build tools/fidl/fidl_api_summarize
```
## Test
Prerequisites:
- Make sure you have `--with=//tools/fidl:tests` in your `fx set`
Run the tests like so:
```
fx test tools/fidl/lib/summarize
```
<!-- xref -->
[fidlir]: /docs/reference/fidl/language/json-ir