All checks were successful
continuous-integration/drone/push Build is passing
71 lines
1.4 KiB
Markdown
71 lines
1.4 KiB
Markdown
# exhaustive
|
|
|
|
[](https://godoc.org/github.com/nishanths/exhaustive)
|
|
|
|
[](https://travis-ci.org/nishanths/exhaustive)
|
|
|
|
The `exhaustive` package and command line program can be used to detect
|
|
enum switch statements that are not exhaustive.
|
|
|
|
An enum switch statement is exhaustive if it has cases for each of the enum's members. See godoc for the definition of enum used by the program.
|
|
|
|
The `exhaustive` package provides an `Analyzer` that follows the guidelines
|
|
described in the [go/analysis](https://godoc.org/golang.org/x/tools/go/analysis) package; this makes
|
|
it possible to integrate into existing analysis driver programs.
|
|
|
|
## Install
|
|
|
|
```
|
|
go get github.com/nishanths/exhaustive/...
|
|
```
|
|
|
|
## Docs
|
|
|
|
https://godoc.org/github.com/nishanths/exhaustive
|
|
|
|
## Example
|
|
|
|
Given the code:
|
|
|
|
```diff
|
|
package token
|
|
|
|
type Token int
|
|
|
|
const (
|
|
Add Token = iota
|
|
Subtract
|
|
Multiply
|
|
+ Quotient
|
|
+ Remainder
|
|
)
|
|
```
|
|
```
|
|
package calc
|
|
|
|
import "token"
|
|
|
|
func processToken(t token.Token) {
|
|
switch t {
|
|
case token.Add:
|
|
...
|
|
case token.Subtract:
|
|
...
|
|
case token.Multiply:
|
|
...
|
|
}
|
|
}
|
|
```
|
|
|
|
Running the `exhaustive` command will print:
|
|
|
|
```
|
|
calc.go:6:2: missing cases in switch of type token.Token: Quotient, Remainder
|
|
```
|
|
|
|
Enums can also be defined using explicit constant values instead of `iota`.
|
|
|
|
## License
|
|
|
|
BSD 2-Clause
|