/
lint.go
80 lines (68 loc) · 1.71 KB
/
lint.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package golang
import (
"margo.sh/golang/goutil"
"margo.sh/mg"
)
// Linter wraps mg.Linter to restrict its Langs to Go
//
// all top-level fields are passed along to the underlying Linter
type Linter struct {
mg.Linter
Actions []mg.Action
Name string
Args []string
Tag mg.IssueTag
Label string
TempDir []string
}
// RInit syncs top-level fields with the underlying Linter
func (lt *Linter) RInit(mx *mg.Ctx) {
l := <.Linter
l.Actions = lt.Actions
l.Name = lt.Name
l.Args = lt.Args
l.Tag = lt.Tag
l.Label = lt.Label
l.TempDir = lt.TempDir
lt.Linter.RInit(mx)
}
// RCond restricts reduction to Go files
func (lt *Linter) RCond(mx *mg.Ctx) bool {
return mx.LangIs(goutil.Langs...) && lt.Linter.RCond(mx)
}
// GoInstall returns a Linter that runs `go install args...`
func GoInstall(args ...string) *Linter {
return &Linter{
Name: "go",
Args: append([]string{"install"}, args...),
Label: "Go/Install",
}
}
// GoInstallDiscardBinaries returns a Linter that runs `go install args...`
// it's like GoInstall, but additionally sets GOBIN to a temp directory
// resulting in all binaries being discarded
func GoInstallDiscardBinaries(args ...string) *Linter {
return &Linter{
Name: "go",
Args: append([]string{"install"}, args...),
Label: "Go/Install",
TempDir: []string{"GOBIN"},
}
}
// GoVet returns a Linter that runs `go vet args...`
func GoVet(args ...string) *Linter {
return &Linter{
Name: "go",
Args: append([]string{"vet"}, args...),
Label: "Go/Vet",
Tag: mg.Warning,
}
}
// GoTest returns a Linter that runs `go test args...`
func GoTest(args ...string) *Linter {
return &Linter{
Name: "go",
Args: append([]string{"test"}, args...),
Label: "Go/Test",
}
}