32 lines
1.5 KiB
Markdown
32 lines
1.5 KiB
Markdown
# Extended "nogo" analysis
|
|
|
|
This package provides a build aspect that perform nogo analysis. This will be
|
|
automatically injected to all relevant libraries when using the default
|
|
`go_binary` and `go_library` rules.
|
|
|
|
It exists for several reasons.
|
|
|
|
* The default `nogo` provided by bazel is insufficient with respect to the
|
|
possibility of binary analysis. This package allows us to analyze the
|
|
generated binary in addition to using the standard analyzers.
|
|
|
|
* The configuration provided in this package is much richer than the standard
|
|
`nogo` JSON blob. Specifically, it allows us to exclude specific structures
|
|
from the composite rules (such as the Ranges that are common with the set
|
|
types).
|
|
|
|
* The bazel version of `nogo` is run directly against the `go_library` and
|
|
`go_binary` targets, meaning that any change to the configuration requires a
|
|
rebuild from scratch (for some reason included all C++ source files in the
|
|
process). Using an aspect is more efficient in this regard.
|
|
|
|
* The checks supported by this package are exported as tests, which makes it
|
|
easier to reason about and plumb into the build system.
|
|
|
|
* For uninteresting reasons, it is impossible to integrate the default `nogo`
|
|
analyzer provided by bazel with internal Google tooling. To provide a
|
|
consistent experience, this package allows those systems to be unified.
|
|
|
|
To use this package, import `nogo_test` from `defs.bzl` and add a single
|
|
dependency which is a `go_binary` or `go_library` rule.
|