Skip to content

Commit 7fc64b7

Browse files
authored
Add linter (#34)
* Add linter * Setup linters + some fixes
1 parent bd7227f commit 7fc64b7

16 files changed

+201
-26
lines changed

.github/workflows/linter.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: "Linter"
2+
on:
3+
push:
4+
branches:
5+
- master
6+
pull_request:
7+
8+
permissions:
9+
contents: read
10+
pull-requests: read
11+
12+
jobs:
13+
golangci:
14+
name: lint
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- uses: actions/setup-go@v5
20+
with:
21+
go-version: '1.21'
22+
cache: false
23+
24+
- name: golangci-lint
25+
uses: golangci/golangci-lint-action@v4
26+
with:
27+
version: v1.56.2
28+
install-mode: "goinstall"
29+
only-new-issues: false
30+
skip-cache: true

.golangci.yml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
run:
2+
timeout: 1m
3+
tests: true
4+
go: '1.18'
5+
show-stats: true
6+
7+
linters:
8+
enable-all: true
9+
# Disable specific linter
10+
# https://golangci-lint.run/usage/linters/#disabled-by-default
11+
disable:
12+
# - asasalint
13+
# - asciicheck
14+
# - bidichk
15+
# - bodyclose
16+
# - containedctx
17+
# - contextcheck
18+
# - copyloopvar
19+
# - cyclop
20+
- deadcode
21+
# - decorder
22+
# - depguard
23+
# - dogsled
24+
# - dupl
25+
# - dupword
26+
# - durationcheck
27+
# - errcheck
28+
# - errchkjson
29+
# - errname
30+
# - errorlint
31+
# - execinquery
32+
# - exhaustive
33+
- exhaustivestruct
34+
- exhaustruct
35+
# - exportloopref
36+
# - forbidigo
37+
# - forcetypeassert
38+
- funlen
39+
# - gci
40+
# - ginkgolinter
41+
# - gocheckcompilerdirectives
42+
# - gochecknoglobals
43+
# - gochecknoinits
44+
# - gochecksumtype
45+
# - gocognit
46+
# - goconst
47+
# - gocritic
48+
# - gocyclo
49+
- godot
50+
# - godox
51+
- goerr113
52+
# - gofmt
53+
# - gofumpt
54+
# - goheader
55+
# - goimports
56+
- golint
57+
# - gomnd
58+
# - gomoddirectives
59+
# - gomodguard
60+
# - goprintffuncname
61+
# - gosec
62+
# - gosimple
63+
# - gosmopolitan
64+
# - govet
65+
# - grouper
66+
- ifshort
67+
# - importas
68+
# - inamedparam
69+
# - ineffassign
70+
# - interfacebloat
71+
- interfacer
72+
# - intrange
73+
# - ireturn
74+
- lll
75+
# - loggercheck
76+
# - maintidx
77+
# - makezero
78+
- maligned
79+
# - mirror
80+
# - misspell
81+
# - musttag
82+
# - nakedret
83+
# - nestif
84+
# - nilerr
85+
# - nilnil
86+
- nlreturn
87+
# - noctx
88+
- nolintlint
89+
- nonamedreturns
90+
- nosnakecase
91+
# - nosprintfhostport
92+
# - paralleltest
93+
- perfsprint
94+
# - prealloc
95+
# - predeclared
96+
# - promlinter
97+
# - protogetter
98+
# - reassign
99+
# - revive
100+
# - rowserrcheck
101+
- scopelint
102+
# - sloglint
103+
# - spancheck
104+
# - sqlclosecheck
105+
# - staticcheck
106+
- structcheck
107+
# - stylecheck
108+
- tagalign
109+
# - tagliatelle
110+
# - tenv
111+
# - testableexamples
112+
# - testifylint
113+
- testpackage
114+
# - thelper
115+
# - tparallel
116+
# - typecheck
117+
# - unconvert
118+
- unparam
119+
# - unused
120+
# - usestdlibvars
121+
- varcheck
122+
- varnamelen
123+
# - wastedassign
124+
# - whitespace
125+
# - wrapcheck
126+
- wsl
127+
# - zerologlint

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
COVERAGE_FILE="coverage.out"
22

3+
.PHONY: test
34
test:
45
go test -v -cover -coverprofile=$(COVERAGE_FILE) -covermode=atomic -count 1 ./...
56

7+
.PHONY: coverage
68
coverage: test
79
go tool cover -html=$(COVERAGE_FILE)
10+
11+
.PHONY: tools
12+
tools:
13+
go install github.com/golangci/golangci-lint/cmd/[email protected]
14+
15+
linter:
16+
golangci-lint run ./...

configurator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (c *Configurator) InitValues() error {
6060
c.registeredTags[p.Name()] = struct{}{}
6161

6262
if err := p.Init(c.configPtr); err != nil {
63-
return fmt.Errorf("cannot init [%s] provider: %v", p.Name(), err)
63+
return fmt.Errorf("cannot init [%s] provider: %w", p.Name(), err)
6464
}
6565
}
6666

@@ -112,7 +112,7 @@ func (c *Configurator) applyProviders(field reflect.StructField, v reflect.Value
112112
}
113113
}
114114

115-
c.onErrorFn(fmt.Errorf("configurator: field [%s] with tags [%v] cannot be set. Last Provider error: %s", field.Name, field.Tag, lastErr))
115+
c.onErrorFn(fmt.Errorf("configurator: field [%s] with tags [%v] cannot be set. Last Provider error: %w", field.Name, field.Tag, lastErr))
116116
}
117117

118118
// FromEnvAndDefault is a shortcut for `New(cfg, NewEnvProvider(), NewDefaultProvider()).InitValues()`.

configurator_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ func TestConfigurator(t *testing.T) {
3131
ObjPtr *struct {
3232
F32 float32 `default:"32"`
3333
StrPtr *string `default:"str_ptr_test"`
34-
HundredMS time.Duration `default:"100ms"`
34+
HundredMS time.Duration `default:"100ms"` // nolint:stylecheck
3535
}
3636
Obj struct {
3737
IntPtr *int16 `default:"123"`
3838
Beta int `file_json:"inside.beta" default:"24"`
3939
StrSlice []string `default:"one;two"`
4040
IntSlice []int64 `default:"3; 4"`
41-
unexported string `xml:"ignored"`
41+
unexported string `xml:"ignored"` // nolint:govet
4242
}
4343
URLs []*string `default:"http://localhost:3000;1.2.3.4:8080"`
4444
HostIP ipTest `default:"127.0.0.3"`

defaultProvider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
const DefaultProviderName = `DefaultProvider`
99

1010
// NewDefaultProvider creates new provider which sets values from `default` tag
11+
// nolint:revive
1112
func NewDefaultProvider() defaultProvider {
1213
return defaultProvider{}
1314
}

defaultProvider_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// nolint:dupl
12
package configuration
23

34
import (

envProvider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
const EnvProviderName = `EnvProvider`
1111

1212
// NewEnvProvider creates provider which sets values from ENV variables (gets variable name from `env` tag)
13+
// nolint:revive
1314
func NewEnvProvider() envProvider {
1415
return envProvider{}
1516
}

envProvider_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// nolint:dupl
12
package configuration
23

34
import (

fieldSetter.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
const sliceSeparator = ";"
1212

13+
// FieldSetter interface
1314
type FieldSetter interface {
1415
SetField(field reflect.StructField, val reflect.Value, valStr string) error
1516
}
@@ -33,7 +34,9 @@ func SetField(field reflect.StructField, val reflect.Value, valStr string) error
3334
return setValue(field.Type, val, valStr)
3435
}
3536

36-
func setValue(t reflect.Type, v reflect.Value, val string) (err error) {
37+
func setValue(t reflect.Type, v reflect.Value, val string) error {
38+
var err error
39+
3740
switch t.Kind() {
3841
case reflect.String:
3942
v.SetString(val)
@@ -63,7 +66,8 @@ func setValue(t reflect.Type, v reflect.Value, val string) (err error) {
6366
default:
6467
err = fmt.Errorf("setValue: unsupported type: %v", v.Kind().String())
6568
}
66-
return
69+
70+
return err
6771
}
6872

6973
func setInt64(v reflect.Value, val string) {
@@ -79,6 +83,7 @@ func setInt64(v reflect.Value, val string) {
7983
v.SetInt(i)
8084
}
8185

86+
// nolint:cyclop
8287
func setSlice(t reflect.Type, v reflect.Value, val string) error {
8388
var (
8489
slice reflect.Value
@@ -141,7 +146,10 @@ func setSlice(t reflect.Type, v reflect.Value, val string) error {
141146
return nil
142147
}
143148

144-
func setPtrValue(t reflect.Type, v reflect.Value, val string) (err error) {
149+
// nolint:cyclop
150+
func setPtrValue(t reflect.Type, v reflect.Value, val string) error {
151+
var err error
152+
145153
switch t.Elem().Name() {
146154
case reflect.Int.String():
147155
if i, err := strconv.Atoi(val); err == nil {
@@ -214,7 +222,8 @@ func setPtrValue(t reflect.Type, v reflect.Value, val string) (err error) {
214222
default:
215223
err = fmt.Errorf("setPtrValue: unsupported type: %v", t.Kind().String())
216224
}
217-
return
225+
226+
return err
218227
}
219228

220229
func splitIntoSlice(val string) []string {

0 commit comments

Comments
 (0)