blob: 7109146d45a250d0b4468f644fd2069706435a76 [file] [log] [blame] [view] [edit]
# FIDL Project Checklist
Changes to FIDL can often have a large number of downstream effects. This
document provides checklists for items that should be considered for various
types of FIDL related changes. Note that not all elements of the checklist will
necessarily apply to every change, but they should at least be helpful for
developers to double check that their changes are complete.
## Change to the `fidlc` compiler
This checklist is for changes that affect FIDL itself, such as syntax or
semantics changes.
* Update documentation.
* [Language reference][fidl-ref] and code snippets where applicable
* [FIDL grammar][fidl-grammar]
* [Bindings spec][bindings-spec] for guidance for how backends should generate
code for this feature
* [FIDL API rubric][api-rubric] for guidance on using this feature.
* Update associated tools.
* The FIDL formatter/linter and their associated TreeVisitors.
* [Editors] and syntax highlighting.
* Update FIDL files. For syntax changes, update existing FIDL source including:
* Actual FIDL source files in tree (and out of tree, if required).
* FIDL source specified as strings in test source code, such as the
[compiler unit tests][compiler-test] and the [fidlgen end-to-end tests][fidlgen-tests].
* FIDL snippets in documentation.
* Ensure that interactions with attributes are handled.
* For example, does the feature require a new placement?
* Update integration tests
* For larger language features, it may be worth adding test coverage in
existing integration tests. For example, ensuring cross binding consistency
through the compatibility tests, or transitionability through the source
compatibility tests.
* For parser changes specifically:
* Update the [`span_tests`][span-tests] to ensure that the parsed spans are
correct, and not just that parsing succeeds.
* For semantics changes:
* Update the feature specific unittest, e.g. [`table_tests`][table-tests] when
making a modification to tables, or create a new test file.
## Change to the JSON IR
* Esnure that the change is reflected by a change in the IR goldens.
* Update the JSON schema
* Update any JSON consumers, including:
* [fidlgen lib][fidlgen-lib]
* [fidl codec][fidl-codec]
* [fidlmerge]
* [fidldoc]
* [banjo]
* [measure-tape]
* [GIDL][gidl]
* [kazoo]
## Change to `fidlgen_<lang>`
* Update the [bindings docs][bindings-refs] if the generated code has
changed
* Update the [bindings tutorials][bindings-tutorials] to reflect the current
best practices and patterns.
* Update any relevant [guides].
* For example, when changing the memory allocation APIs in LLCPP, the
[LLCPP allocator guide][llcpp-allocators] should be updated.
<!-- xrefs -->
[editors]: /docs/development/languages/fidl/guides/editors.md
[fidlgen-lib]: /tools/fidl/lib/fidlgen
[fidl-codec]: /src/lib/fidl_codec
[fidlmerge]: /tools/fidl/fidlmerge
[bindings-refs]: /docs/reference/fidl/bindings/overview.md
[bindings-spec]: /docs/reference/fidl/language/bindings-spec.md
[fidl-ref]: /docs/reference/fidl/language/language.md
[fidl-grammar]: /docs/reference/fidl/language/grammar.md
[api-rubric]: /docs/concepts/api/fidl.md
[span-tests]: /zircon/system/utest/fidl-compiler/span_tests.cc
[table-tests]: /zircon/system/utest/fidl-compiler/table_tests.cc
[fidldoc]: /tools/fidl/fidldoc
[banjo]: /src/devices/tools/fidlgen_banjo
[measure-tape]: /tools/fidl/measure-tape
[gidl]: /tools/fidl/gidl
[kazoo]: /zircon/tools/kazoo
[bindings-tutorials]: /docs/development/languages/fidl/tutorials/overview.md
[llcpp-allocators]: /docs/development/languages/fidl/guides/llcpp-memory-ownership.md
[fidl-compiler]: /zircon/system/utest/fidl-compiler
[fidlgen-tests]: /tools/fidl/lib/fidlgentest