Skip to content

Commit 2fe8fb2

Browse files
committed
fix lint
1 parent 1c1e336 commit 2fe8fb2

23 files changed

+414
-368
lines changed

.golangci.yml

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json
2+
3+
run:
4+
allow-parallel-runners: true
5+
timeout: 3m
6+
7+
linters:
8+
disable-all: true
9+
enable:
10+
- asasalint
11+
- bidichk
12+
- bodyclose
13+
- canonicalheader
14+
- copyloopvar
15+
- durationcheck
16+
- errcheck
17+
- errchkjson
18+
- errname
19+
- errorlint
20+
- exhaustive
21+
- fatcontext
22+
- forcetypeassert
23+
- gocheckcompilerdirectives
24+
- gocognit
25+
- gocritic
26+
- gofmt
27+
- gofumpt
28+
- goprintffuncname
29+
- gosec
30+
- gosimple
31+
- govet
32+
- grouper
33+
- inamedparam
34+
- ineffassign
35+
- intrange
36+
- makezero
37+
- mirror
38+
- musttag
39+
- nakedret
40+
- nilerr
41+
- nilnil
42+
- nolintlint
43+
- paralleltest
44+
- perfsprint
45+
- predeclared
46+
- reassign
47+
- revive
48+
- staticcheck
49+
- stylecheck
50+
- testableexamples
51+
- testifylint
52+
- tparallel
53+
- unconvert
54+
- unparam
55+
- unused
56+
- usestdlibvars
57+
- usetesting
58+
- whitespace
59+
60+
linters-settings:
61+
govet:
62+
enable-all: true
63+
64+
issues:
65+
exclude-rules:
66+
- path: (.+)_test.go
67+
linters:
68+
- govet
69+
text: fieldalignment

cmd/flags.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import (
66

77
// flags represents the flags for the root command.
88
type flags struct {
9+
set string
910
auth bool
1011
check bool
11-
set string
1212
unset bool
1313
}
1414

1515
// cmdFlags configures command flags for the root command.
1616
func cmdFlags(c *cobra.Command, f *flags) {
17+
c.Flags().StringVarP(&f.set, "set", "s", "", "set github token into os environment variable (e.g., gitty -s=your_github_token)")
1718
c.Flags().BoolVarP(&f.auth, "auth", "a", false, "print authenticated username")
1819
c.Flags().BoolVarP(&f.check, "check", "c", false, "check client status and remaining rate limit")
19-
c.Flags().StringVarP(&f.set, "set", "s", "", "set github token into os environment variable (e.g. gitty -s=your_github_token)")
2020
c.Flags().BoolVarP(&f.unset, "unset", "u", false, "unset github token from os environment variable")
2121
}

cmd/flags_test.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@ import (
44
"testing"
55

66
"github.com/spf13/cobra"
7-
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
88
)
99

1010
func TestCmdFlags(t *testing.T) {
11+
t.Parallel()
1112
c := &cobra.Command{}
1213
f := &flags{}
1314

1415
cmdFlags(c, f)
1516

1617
_, err := c.Flags().GetString("set")
17-
assert.Nil(t, err)
18+
require.NoError(t, err)
1819
_, err = c.Flags().GetBool("auth")
19-
assert.Nil(t, err)
20+
require.NoError(t, err)
2021
_, err = c.Flags().GetBool("check")
21-
assert.Nil(t, err)
22+
require.NoError(t, err)
2223
_, err = c.Flags().GetBool("unset")
23-
assert.Nil(t, err)
24+
require.NoError(t, err)
2425
}

cmd/root_test.go

+27-29
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package cmd
22

33
import (
44
"context"
5-
"fmt"
5+
"errors"
66
"os"
77
"os/exec"
8-
"syscall"
98
"testing"
109

1110
"github.com/spf13/cobra"
1211
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
1313
"github.com/worlpaker/gitty/gitty"
1414
"github.com/worlpaker/gitty/gitty/token"
1515
)
@@ -20,61 +20,57 @@ func fakeNewGitty() gitty.Gitty {
2020

2121
type mock struct{}
2222

23-
func (m *mock) Status(ctx context.Context) error {
23+
func (m *mock) Status(_ context.Context) error {
2424
return nil
2525
}
26-
func (m *mock) Download(ctx context.Context, url string) error {
26+
27+
func (m *mock) Download(_ context.Context, _ string) error {
2728
return nil
2829
}
29-
func (m *mock) Auth(ctx context.Context) error {
30+
31+
func (m *mock) Auth(_ context.Context) error {
3032
return nil
3133
}
3234

3335
func TestSubCommands(t *testing.T) {
36+
t.Parallel()
3437
c := &cobra.Command{}
3538
subCommands(c)
3639
assert.True(t, c.HasSubCommands())
3740
}
3841

3942
func TestCmdSettings(t *testing.T) {
40-
// Discard output during tests.
41-
defer func(stdout *os.File) {
42-
os.Stdout = stdout
43-
}(os.Stdout)
44-
os.Stdout = os.NewFile(uintptr(syscall.Stdin), os.DevNull)
45-
43+
t.Parallel()
4644
c := &cobra.Command{}
4745
cmdSettings(c)
4846
f := c.FlagErrorFunc()
49-
err := f(c, fmt.Errorf("test error"))
50-
assert.Nil(t, err)
47+
err := f(c, errors.New("test error"))
48+
require.NoError(t, err)
5149
}
5250

5351
func TestExecute(t *testing.T) {
54-
// Set fake args and discard output during tests.
55-
oldArgs := os.Args
56-
defer func(stdout *os.File) {
57-
os.Args = oldArgs
58-
os.Stdout = stdout
59-
}(os.Stdout)
60-
os.Stdout = os.NewFile(uintptr(syscall.Stdin), os.DevNull)
52+
t.Parallel()
53+
// Set fake args during tests.
54+
originalArgs := os.Args
55+
t.Cleanup(func() {
56+
os.Args = originalArgs
57+
})
6158
os.Args = []string{"test flag", "--check"}
6259

6360
err := Execute(context.Background(), "1.0.0")
64-
assert.Nil(t, err)
61+
require.NoError(t, err)
6562
}
6663

6764
func TestRunRoot(t *testing.T) {
68-
// Restore token and discard output during tests.
65+
t.Parallel()
66+
// Restore token.
6967
localToken := token.Get()
70-
defer func(stdout *os.File) {
68+
t.Cleanup(func() {
7169
if localToken != "" {
7270
err := token.Set(localToken)
73-
assert.Nil(t, err)
71+
require.NoError(t, err)
7472
}
75-
os.Stdout = stdout
76-
}(os.Stdout)
77-
os.Stdout = os.NewFile(uintptr(syscall.Stdin), os.DevNull)
73+
})
7874

7975
tests := []struct {
8076
name string
@@ -111,6 +107,7 @@ func TestRunRoot(t *testing.T) {
111107

112108
for _, test := range tests {
113109
t.Run(test.name, func(t *testing.T) {
110+
t.Parallel()
114111
c := &cobra.Command{}
115112
g := fakeNewGitty()
116113
runFunc := runRoot(context.Background(), &test.flags, g)
@@ -119,11 +116,12 @@ func TestRunRoot(t *testing.T) {
119116
// The result might not be nil in very rare cases.
120117
// Error: &exec.ExitError{ProcessState:(*os.ProcessState)(0xc00017a288), Stderr:[]uint8(nil)}
121118
if err != nil {
122-
if e, ok := err.(*exec.ExitError); ok && !e.Success() {
119+
var execErr *exec.ExitError
120+
if errors.As(err, &execErr) && !execErr.Success() {
123121
return
124122
}
125123
}
126-
assert.Nil(t, err)
124+
require.NoError(t, err)
127125
})
128126
}
129127
}

cmd/version.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func versionCmd() *cobra.Command {
1111
return &cobra.Command{
1212
Use: "version",
1313
Short: "Print the version number of gitty",
14-
Run: func(cmd *cobra.Command, args []string) {
14+
Run: func(cmd *cobra.Command, _ []string) {
1515
fmt.Println("gitty version", cmd.Root().Version)
1616
},
1717
}

cmd/version_test.go

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
package cmd
22

33
import (
4-
"os"
5-
"syscall"
64
"testing"
75

86
"github.com/spf13/cobra"
97
)
108

119
func TestVersionCmd(t *testing.T) {
12-
// Discard output during tests.
13-
defer func(stdout *os.File) {
14-
os.Stdout = stdout
15-
}(os.Stdout)
16-
os.Stdout = os.NewFile(uintptr(syscall.Stdin), os.DevNull)
17-
10+
t.Parallel()
1811
c := &cobra.Command{Version: "1.0.0"}
1912
v := versionCmd()
2013
v.Run(c, nil)

gitty/github.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type Client interface {
4343
}
4444

4545
// Ensure service implements the Client interface.
46-
var _ Client = &service{}
46+
var _ Client = (*service)(nil)
4747

4848
// Get issues a GET to the specified URL. If the response is one of the
4949
// following redirect codes, Get follows the redirect after calling the

gitty/github_test.go

+19-18
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import (
66
"io"
77
"net/http"
88
"os"
9-
109
"testing"
1110

1211
"github.com/brianvoe/gofakeit/v7"
1312
"github.com/google/go-github/v67/github"
1413
"github.com/stretchr/testify/assert"
14+
"github.com/stretchr/testify/require"
1515
)
1616

1717
func TestNewClient(t *testing.T) {
@@ -37,20 +37,15 @@ func TestNewClient(t *testing.T) {
3737

3838
for _, test := range tests {
3939
t.Run(test.name, func(t *testing.T) {
40-
if !test.auth {
41-
err := os.Unsetenv(tokenKey)
42-
assert.Nil(t, err)
40+
if test.auth {
41+
t.Setenv(tokenKey, fakeValue)
4342
client := newClient()
44-
assert.Equal(t, test.expected, client)
43+
assert.Equal(t, test.expected.UserAgent, client.UserAgent)
4544
} else {
46-
err := os.Setenv(tokenKey, fakeValue)
47-
assert.Nil(t, err)
48-
t.Cleanup(func() {
49-
err = os.Unsetenv(tokenKey)
50-
assert.Nil(t, err)
51-
})
45+
err := os.Unsetenv(tokenKey)
46+
require.NoError(t, err)
5247
client := newClient()
53-
assert.Equal(t, test.expected.UserAgent, client.UserAgent)
48+
assert.Equal(t, test.expected, client)
5449
}
5550
})
5651
}
@@ -60,7 +55,7 @@ var mockGetBody = []byte(`{"data":"test"}`)
6055

6156
type mock struct{}
6257

63-
func (m mock) RoundTrip(req *http.Request) (*http.Response, error) {
58+
func (m mock) RoundTrip(_ *http.Request) (*http.Response, error) {
6459
resp := &http.Response{
6560
StatusCode: http.StatusOK,
6661
Body: io.NopCloser(bytes.NewReader(mockGetBody)),
@@ -79,35 +74,41 @@ func setup() *service {
7974
}
8075

8176
func TestGet(t *testing.T) {
77+
t.Parallel()
8278
s := setup()
79+
8380
resp, err := s.Get("https://test.com")
84-
assert.Nil(t, err)
81+
require.NoError(t, err)
8582
defer resp.Body.Close()
8683
assert.Equal(t, http.StatusOK, resp.StatusCode)
84+
8785
expectedBody, _ := io.ReadAll(resp.Body)
88-
assert.Equal(t, mockGetBody, expectedBody)
86+
assert.Equal(t, expectedBody, mockGetBody)
8987
}
9088

9189
func TestGetContents(t *testing.T) {
90+
t.Parallel()
9291
s := setup()
9392
opts := &github.RepositoryContentGetOptions{
9493
Ref: "main",
9594
}
9695
_, _, resp, err := s.GetContents(context.Background(), "owner", "repo", "path", opts)
97-
assert.Nil(t, err)
96+
require.NoError(t, err)
9897
assert.Equal(t, http.StatusOK, resp.StatusCode)
9998
}
10099

101100
func TestRateLimit(t *testing.T) {
101+
t.Parallel()
102102
s := setup()
103103
_, resp, err := s.RateLimit(context.Background())
104-
assert.Nil(t, err)
104+
require.NoError(t, err)
105105
assert.Equal(t, http.StatusOK, resp.StatusCode)
106106
}
107107

108108
func TestGetUser(t *testing.T) {
109+
t.Parallel()
109110
s := setup()
110111
_, resp, err := s.GetUser(context.Background(), "")
111-
assert.Nil(t, err)
112+
require.NoError(t, err)
112113
assert.Equal(t, http.StatusOK, resp.StatusCode)
113114
}

gitty/gitty.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type Gitty interface {
1919
}
2020

2121
// Ensure Git implements the Gitty interface.
22-
var _ Gitty = &Git{}
22+
var _ Gitty = (*Git)(nil)
2323

2424
// New creates a new Gitty.
2525
func New() Gitty {

0 commit comments

Comments
 (0)