mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-03-01 09:31:00 +00:00
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
|