From b9a752fd668f39ceda58a33bc40d4282b82a58b2 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 4 Oct 2022 13:00:49 +0200 Subject: [PATCH 1/5] remove go1.16 from test matrix Both go1.16 and go1.17 reached EOL; keeping go1.17 for now, as there may still be projects that are slightly behind. Signed-off-by: Sebastiaan van Stijn --- .circleci/config.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 78b312a..ec896dc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,11 +7,6 @@ workflows: ci: jobs: - lint - - go/test: - name: test-golang-1.16 - executor: - name: go/golang - tag: 1.16-alpine - go/test: name: test-golang-1.17 executor: From f0f47640120ca1d4460c2970d5660ccad4034394 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 4 Oct 2022 13:05:53 +0200 Subject: [PATCH 2/5] fix formatting of nolint tags Also replacing some of them, as there's more linters that check for this now (revive being one of them), so "fixing" them prevents having to add more linters to the list. Signed-off-by: Sebastiaan van Stijn --- assert/cmd/gty-migrate-from-testify/call.go | 3 +-- assert/cmp/compare.go | 2 +- fs/file.go | 6 ++---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/assert/cmd/gty-migrate-from-testify/call.go b/assert/cmd/gty-migrate-from-testify/call.go index 9ebb093..d515a42 100644 --- a/assert/cmd/gty-migrate-from-testify/call.go +++ b/assert/cmd/gty-migrate-from-testify/call.go @@ -22,8 +22,7 @@ type call struct { func (c call) String() string { buf := new(bytes.Buffer) - //nolint: errcheck - format.Node(buf, token.NewFileSet(), c.expr) + _ = format.Node(buf, token.NewFileSet(), c.expr) return buf.String() } diff --git a/assert/cmp/compare.go b/assert/cmp/compare.go index fce073b..4112b00 100644 --- a/assert/cmp/compare.go +++ b/assert/cmp/compare.go @@ -249,7 +249,7 @@ type causer interface { } func formatErrorMessage(err error) string { - //nolint: errorlint // unwrapping is not appropriate here + //nolint:errorlint // unwrapping is not appropriate here if _, ok := err.(causer); ok { return fmt.Sprintf("%q\n%+v", err, err) } diff --git a/fs/file.go b/fs/file.go index 1db8c5e..eb8e301 100644 --- a/fs/file.go +++ b/fs/file.go @@ -72,8 +72,7 @@ func (f *File) Path() string { // Remove the file func (f *File) Remove() { - //nolint: errcheck - os.Remove(f.path) + _ = os.Remove(f.path) } // Dir is a temporary directory @@ -106,8 +105,7 @@ func (d *Dir) Path() string { // Remove the directory func (d *Dir) Remove() { - //nolint: errcheck - os.RemoveAll(d.path) + _ = os.RemoveAll(d.path) } // Join returns a new path with this directory as the base of the path From b881b33471ed35d3b5b38f36c5386359947278d5 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 4 Oct 2022 12:57:01 +0200 Subject: [PATCH 3/5] replace uses of deprecated io/ioutil Signed-off-by: Sebastiaan van Stijn --- assert/assert_ext_test.go | 10 ++-- assert/cmd/gty-migrate-from-testify/main.go | 3 +- .../cmd/gty-migrate-from-testify/main_test.go | 4 +- fs/example_test.go | 5 +- fs/file.go | 5 +- fs/file_test.go | 9 +-- fs/manifest.go | 9 ++- fs/manifest_test.go | 7 +-- fs/ops.go | 55 ++++++++++--------- fs/ops_test.go | 3 +- fs/path.go | 3 +- fs/report.go | 6 +- golden/golden.go | 7 +-- golden/golden_test.go | 5 +- 14 files changed, 62 insertions(+), 69 deletions(-) diff --git a/assert/assert_ext_test.go b/assert/assert_ext_test.go index d450ce2..8acf44d 100644 --- a/assert/assert_ext_test.go +++ b/assert/assert_ext_test.go @@ -4,7 +4,7 @@ import ( "go/ast" "go/parser" "go/token" - "io/ioutil" + "os" "runtime" "strings" "testing" @@ -33,7 +33,7 @@ that we are testing ` assert.Equal(t, actual, expectedOne) - raw, err := ioutil.ReadFile(fileName(t)) + raw, err := os.ReadFile(fileName(t)) assert.NilError(t, err) expected := "var expectedOne = `this is the\nactual value\nthat we are testing\n`" @@ -51,7 +51,7 @@ expected value ` assert.Equal(t, actual, expectedTwo) - raw, err := ioutil.ReadFile(fileName(t)) + raw, err := os.ReadFile(fileName(t)) assert.NilError(t, err) expected := "const expectedTwo = `this is the new\nexpected value\n`" @@ -72,7 +72,7 @@ for var inside function assert.Equal(t, actual, expectedInsideFunc) - raw, err := ioutil.ReadFile(fileName(t)) + raw, err := os.ReadFile(fileName(t)) assert.NilError(t, err) expected := "expectedInsideFunc := `this is the new\nexpected value\nfor var inside function\n`" @@ -93,7 +93,7 @@ for const inside function assert.Equal(t, actual, expectedConstInsideFunc) - raw, err := ioutil.ReadFile(fileName(t)) + raw, err := os.ReadFile(fileName(t)) assert.NilError(t, err) expected := "const expectedConstInsideFunc = `this is the new\nexpected value\nfor const inside function\n`" diff --git a/assert/cmd/gty-migrate-from-testify/main.go b/assert/cmd/gty-migrate-from-testify/main.go index 91bccc2..e066378 100644 --- a/assert/cmd/gty-migrate-from-testify/main.go +++ b/assert/cmd/gty-migrate-from-testify/main.go @@ -8,7 +8,6 @@ import ( "go/ast" "go/format" "go/token" - "io/ioutil" "log" "os" "path" @@ -126,7 +125,7 @@ func run(opts options) error { return fmt.Errorf("failed to format %s: %w", filename, err) } - if err := ioutil.WriteFile(absFilename, raw, 0); err != nil { + if err := os.WriteFile(absFilename, raw, 0); err != nil { return fmt.Errorf("failed to write file %s: %w", filename, err) } } diff --git a/assert/cmd/gty-migrate-from-testify/main_test.go b/assert/cmd/gty-migrate-from-testify/main_test.go index e5accbb..d7f5968 100644 --- a/assert/cmd/gty-migrate-from-testify/main_test.go +++ b/assert/cmd/gty-migrate-from-testify/main_test.go @@ -1,7 +1,7 @@ package main import ( - "io/ioutil" + "os" "testing" "github.com/google/go-cmp/cmp" @@ -25,7 +25,7 @@ func TestRun(t *testing.T) { }) assert.NilError(t, err) - raw, err := ioutil.ReadFile(dir.Join("src/example.com/example/some_test.go")) + raw, err := os.ReadFile(dir.Join("src/example.com/example/some_test.go")) assert.NilError(t, err) golden.Assert(t, string(raw), "full-expected/some_test.go") } diff --git a/fs/example_test.go b/fs/example_test.go index 09ea38d..ece5b4b 100644 --- a/fs/example_test.go +++ b/fs/example_test.go @@ -1,7 +1,6 @@ package fs_test import ( - "io/ioutil" "os" "testing" @@ -18,7 +17,7 @@ func ExampleNewDir() { dir := fs.NewDir(t, "test-name", fs.WithFile("file1", "content\n")) defer dir.Remove() - files, err := ioutil.ReadDir(dir.Path()) + files, err := os.ReadDir(dir.Path()) assert.NilError(t, err) assert.Assert(t, cmp.Len(files, 0)) } @@ -28,7 +27,7 @@ func ExampleNewFile() { file := fs.NewFile(t, "test-name", fs.WithContent("content\n"), fs.AsUser(0, 0)) defer file.Remove() - content, err := ioutil.ReadFile(file.Path()) + content, err := os.ReadFile(file.Path()) assert.NilError(t, err) assert.Equal(t, "content\n", content) } diff --git a/fs/file.go b/fs/file.go index eb8e301..f778e9c 100644 --- a/fs/file.go +++ b/fs/file.go @@ -5,7 +5,6 @@ contents and structure of a directory. package fs // import "gotest.tools/v3/fs" import ( - "io/ioutil" "os" "path/filepath" "runtime" @@ -46,7 +45,7 @@ func NewFile(t assert.TestingT, prefix string, ops ...PathOp) *File { if ht, ok := t.(helperT); ok { ht.Helper() } - tempfile, err := ioutil.TempFile("", cleanPrefix(prefix)+"-") + tempfile, err := os.CreateTemp("", cleanPrefix(prefix)+"-") assert.NilError(t, err) file := &File{path: tempfile.Name()} @@ -89,7 +88,7 @@ func NewDir(t assert.TestingT, prefix string, ops ...PathOp) *Dir { if ht, ok := t.(helperT); ok { ht.Helper() } - path, err := ioutil.TempDir("", cleanPrefix(prefix)+"-") + path, err := os.MkdirTemp("", cleanPrefix(prefix)+"-") assert.NilError(t, err) dir := &Dir{path: path} cleanup.Cleanup(t, dir.Remove) diff --git a/fs/file_test.go b/fs/file_test.go index 5e8be4d..c4f7348 100644 --- a/fs/file_test.go +++ b/fs/file_test.go @@ -2,7 +2,6 @@ package fs_test import ( "errors" - "io/ioutil" "os" "path/filepath" "testing" @@ -97,15 +96,11 @@ func TestNewDir_IntegrationWithCleanup(t *testing.T) { } func TestDirFromPath(t *testing.T) { - tmpdir, err := ioutil.TempDir("", t.Name()) - assert.NilError(t, err) - t.Cleanup(func() { - os.RemoveAll(tmpdir) - }) + tmpdir := t.TempDir() dir := fs.DirFromPath(t, tmpdir, fs.WithFile("newfile", "")) - _, err = os.Stat(dir.Join("newfile")) + _, err := os.Stat(dir.Join("newfile")) assert.NilError(t, err) assert.Equal(t, dir.Path(), tmpdir) diff --git a/fs/manifest.go b/fs/manifest.go index b657bd9..44348c5 100644 --- a/fs/manifest.go +++ b/fs/manifest.go @@ -3,7 +3,6 @@ package fs import ( "fmt" "io" - "io/ioutil" "os" "path/filepath" @@ -84,7 +83,7 @@ func manifestFromDir(path string) (Manifest, error) { func newDirectory(path string, info os.FileInfo) (*directory, error) { items := make(map[string]dirEntry) - children, err := ioutil.ReadDir(path) + children, err := os.ReadDir(path) if err != nil { return nil, err } @@ -103,7 +102,11 @@ func newDirectory(path string, info os.FileInfo) (*directory, error) { }, nil } -func getTypedResource(path string, info os.FileInfo) (dirEntry, error) { +func getTypedResource(path string, entry os.DirEntry) (dirEntry, error) { + info, err := entry.Info() + if err != nil { + return nil, err + } switch { case info.IsDir(): return newDirectory(path, info) diff --git a/fs/manifest_test.go b/fs/manifest_test.go index 2cbc610..fdaf8c7 100644 --- a/fs/manifest_test.go +++ b/fs/manifest_test.go @@ -3,7 +3,6 @@ package fs import ( "bytes" "io" - "io/ioutil" "os" "runtime" "strings" @@ -92,12 +91,12 @@ var cmpManifest = cmp.Options{ if x == nil || y == nil { return x == y } - xContent, err := ioutil.ReadAll(x) + xContent, err := io.ReadAll(x) if err != nil { return false } - yContent, err := ioutil.ReadAll(y) + yContent, err := io.ReadAll(y) if err != nil { return false } @@ -106,5 +105,5 @@ var cmpManifest = cmp.Options{ } func readCloser(s string) io.ReadCloser { - return ioutil.NopCloser(strings.NewReader(s)) + return io.NopCloser(strings.NewReader(s)) } diff --git a/fs/ops.go b/fs/ops.go index 9e1e068..1bb72e3 100644 --- a/fs/ops.go +++ b/fs/ops.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -43,10 +42,10 @@ type manifestDirectory interface { func WithContent(content string) PathOp { return func(path Path) error { if m, ok := path.(manifestFile); ok { - m.SetContent(ioutil.NopCloser(strings.NewReader(content))) + m.SetContent(io.NopCloser(strings.NewReader(content))) return nil } - return ioutil.WriteFile(path.Path(), []byte(content), defaultFileMode) + return os.WriteFile(path.Path(), []byte(content), defaultFileMode) } } @@ -54,10 +53,10 @@ func WithContent(content string) PathOp { func WithBytes(raw []byte) PathOp { return func(path Path) error { if m, ok := path.(manifestFile); ok { - m.SetContent(ioutil.NopCloser(bytes.NewReader(raw))) + m.SetContent(io.NopCloser(bytes.NewReader(raw))) return nil } - return ioutil.WriteFile(path.Path(), raw, defaultFileMode) + return os.WriteFile(path.Path(), raw, defaultFileMode) } } @@ -65,7 +64,7 @@ func WithBytes(raw []byte) PathOp { func WithReaderContent(r io.Reader) PathOp { return func(path Path) error { if m, ok := path.(manifestFile); ok { - m.SetContent(ioutil.NopCloser(r)) + m.SetContent(io.NopCloser(r)) return nil } f, err := os.OpenFile(path.Path(), os.O_WRONLY, defaultFileMode) @@ -107,7 +106,7 @@ func WithFile(filename, content string, ops ...PathOp) PathOp { } func createFile(fullpath string, content string) error { - return ioutil.WriteFile(fullpath, []byte(content), defaultFileMode) + return os.WriteFile(fullpath, []byte(content), defaultFileMode) } // WithFiles creates all the files in the directory at path with their content @@ -191,34 +190,38 @@ func WithMode(mode os.FileMode) PathOp { } func copyDirectory(source, dest string) error { - entries, err := ioutil.ReadDir(source) + entries, err := os.ReadDir(source) if err != nil { return err } for _, entry := range entries { sourcePath := filepath.Join(source, entry.Name()) destPath := filepath.Join(dest, entry.Name()) - switch { - case entry.IsDir(): - if err := os.Mkdir(destPath, 0755); err != nil { - return err - } - if err := copyDirectory(sourcePath, destPath); err != nil { - return err - } - case entry.Mode()&os.ModeSymlink != 0: - if err := copySymLink(sourcePath, destPath); err != nil { - return err - } - default: - if err := copyFile(sourcePath, destPath); err != nil { - return err - } + err = copyEntry(entry, destPath, sourcePath) + if err != nil { + return err } } return nil } +func copyEntry(entry os.DirEntry, destPath string, sourcePath string) error { + if entry.IsDir() { + if err := os.Mkdir(destPath, 0755); err != nil { + return err + } + return copyDirectory(sourcePath, destPath) + } + info, err := entry.Info() + if err != nil { + return err + } + if info.Mode()&os.ModeSymlink != 0 { + return copySymLink(sourcePath, destPath) + } + return copyFile(sourcePath, destPath) +} + func copySymLink(source, dest string) error { link, err := os.Readlink(source) if err != nil { @@ -228,11 +231,11 @@ func copySymLink(source, dest string) error { } func copyFile(source, dest string) error { - content, err := ioutil.ReadFile(source) + content, err := os.ReadFile(source) if err != nil { return err } - return ioutil.WriteFile(dest, content, 0644) + return os.WriteFile(dest, content, 0644) } // WithSymlink creates a symlink in the directory which links to target. diff --git a/fs/ops_test.go b/fs/ops_test.go index 7185f2a..463aaa3 100644 --- a/fs/ops_test.go +++ b/fs/ops_test.go @@ -1,7 +1,6 @@ package fs_test import ( - "io/ioutil" "os" "path/filepath" "runtime" @@ -71,7 +70,7 @@ func TestApply(t *testing.T) { tmpFile := fs.NewFile(t, "test-update-file", fs.WithContent("contenta")) defer tmpFile.Remove() fs.Apply(t, tmpFile, fs.WithContent("contentb")) - content, err := ioutil.ReadFile(tmpFile.Path()) + content, err := os.ReadFile(tmpFile.Path()) assert.NilError(t, err) assert.Equal(t, string(content), "contentb") }) diff --git a/fs/path.go b/fs/path.go index c301b90..550044a 100644 --- a/fs/path.go +++ b/fs/path.go @@ -3,7 +3,6 @@ package fs import ( "bytes" "io" - "io/ioutil" "os" "gotest.tools/v3/assert" @@ -124,7 +123,7 @@ func normalizeID(id int) uint32 { return uint32(id) } -var anyFileContent = ioutil.NopCloser(bytes.NewReader(nil)) +var anyFileContent = io.NopCloser(bytes.NewReader(nil)) // MatchAnyFileContent is a PathOp that updates a Manifest so that the file // at path may contain any content. diff --git a/fs/report.go b/fs/report.go index 1a3c668..5e79e49 100644 --- a/fs/report.go +++ b/fs/report.go @@ -3,7 +3,7 @@ package fs import ( "bytes" "fmt" - "io/ioutil" + "io" "os" "path/filepath" "runtime" @@ -86,9 +86,9 @@ func eqFile(x, y *file) []problem { return p } - xContent, xErr := ioutil.ReadAll(x.content) + xContent, xErr := io.ReadAll(x.content) defer x.content.Close() - yContent, yErr := ioutil.ReadAll(y.content) + yContent, yErr := io.ReadAll(y.content) defer y.content.Close() if xErr != nil { diff --git a/golden/golden.go b/golden/golden.go index 581e455..ce96ba1 100644 --- a/golden/golden.go +++ b/golden/golden.go @@ -12,7 +12,6 @@ import ( "bytes" "flag" "fmt" - "io/ioutil" "os" "path/filepath" @@ -63,7 +62,7 @@ func Get(t assert.TestingT, filename string) []byte { if ht, ok := t.(helperT); ok { ht.Helper() } - expected, err := ioutil.ReadFile(Path(filename)) + expected, err := os.ReadFile(Path(filename)) assert.NilError(t, err) return expected } @@ -168,7 +167,7 @@ func compare(actual []byte, filename string) (cmp.Result, []byte) { if err := update(filename, actual); err != nil { return cmp.ResultFromError(err), nil } - expected, err := ioutil.ReadFile(Path(filename)) + expected, err := os.ReadFile(Path(filename)) if err != nil { return cmp.ResultFromError(err), nil } @@ -187,5 +186,5 @@ func update(filename string, actual []byte) error { return err } } - return ioutil.WriteFile(Path(filename), actual, 0644) + return os.WriteFile(Path(filename), actual, 0644) } diff --git a/golden/golden_test.go b/golden/golden_test.go index 3b0bd02..e020840 100644 --- a/golden/golden_test.go +++ b/golden/golden_test.go @@ -1,7 +1,6 @@ package golden import ( - "io/ioutil" "os" "path/filepath" "testing" @@ -203,7 +202,7 @@ func setUpdateFlag(t *testing.T) func() { func setupGoldenFileWithDir(t *testing.T, dirname, content string) (string, func()) { dirpath := filepath.Join("testdata", dirname) _ = os.MkdirAll(filepath.Join("testdata", dirname), 0755) - f, err := ioutil.TempFile(dirpath, t.Name()+"-") + f, err := os.CreateTemp(dirpath, t.Name()+"-") assert.NilError(t, err, "fail to create test golden file") defer f.Close() @@ -218,7 +217,7 @@ func setupGoldenFileWithDir(t *testing.T, dirname, content string) (string, func func setupGoldenFile(t *testing.T, content string) (string, func()) { _ = os.Mkdir("testdata", 0755) - f, err := ioutil.TempFile("testdata", t.Name()+"-") + f, err := os.CreateTemp("testdata", t.Name()+"-") assert.NilError(t, err, "fail to create test golden file") defer f.Close() From 77e24c3215533122a219f248291e7f26ada66df6 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 4 Oct 2022 13:25:37 +0200 Subject: [PATCH 4/5] Add package GoDoc for some internal packages (revive) internal/maint/maint.go:1:1: package-comments: should have a package comment (revive) package maint // import "gotest.tools/v3/internal/maint" internal/format/diff.go:1:1: package-comments: should have a package comment (revive) package format icmd/internal/stub/main.go:1:1: package-comments: should have a package comment (revive) package main internal/source/defers.go:1:1: package-comments: should have a package comment (revive) package source internal/assert/assert.go:1:1: package-comments: should have a package comment (revive) package assert Signed-off-by: Sebastiaan van Stijn --- icmd/internal/stub/main.go | 1 + internal/assert/assert.go | 1 + internal/format/diff.go | 1 + internal/maint/maint.go | 2 ++ internal/source/source.go | 1 + 5 files changed, 6 insertions(+) diff --git a/icmd/internal/stub/main.go b/icmd/internal/stub/main.go index a7fa1fd..77395f4 100644 --- a/icmd/internal/stub/main.go +++ b/icmd/internal/stub/main.go @@ -1,3 +1,4 @@ +// Package main produces a test-binary used in tests. package main import ( diff --git a/internal/assert/assert.go b/internal/assert/assert.go index 0d67751..2dd8025 100644 --- a/internal/assert/assert.go +++ b/internal/assert/assert.go @@ -1,3 +1,4 @@ +// Package assert provides internal utilties for assertions. package assert import ( diff --git a/internal/format/diff.go b/internal/format/diff.go index 9897d4b..4f6c07a 100644 --- a/internal/format/diff.go +++ b/internal/format/diff.go @@ -1,3 +1,4 @@ +// Package format provides utilities for formatting diffs and messages. package format import ( diff --git a/internal/maint/maint.go b/internal/maint/maint.go index 6d6a7cf..c4e8588 100644 --- a/internal/maint/maint.go +++ b/internal/maint/maint.go @@ -1,3 +1,5 @@ +// Package maint implements assert.TestingT for uses outside of test cases, +// for example, in a TestMain. package maint // import "gotest.tools/v3/internal/maint" import ( diff --git a/internal/source/source.go b/internal/source/source.go index a3f7008..a4fc24e 100644 --- a/internal/source/source.go +++ b/internal/source/source.go @@ -1,3 +1,4 @@ +// Package source provides utilities for handling source-code. package source // import "gotest.tools/v3/internal/source" import ( From 5b51cec00a8dea2c9157e8a7d4af0f127fdbdc1c Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 4 Oct 2022 13:00:01 +0200 Subject: [PATCH 5/5] update golangci-lint to v1.49.0 Also replaced deprecated linters: WARN [runner] The linter 'varcheck' is deprecated (since v1.49.0) due to: The owner seems to have abandoned the linter. Replaced by unused. WARN [runner] The linter 'structcheck' is deprecated (since v1.49.0) due to: The owner seems to have abandoned the linter. Replaced by unused. WARN [runner] The linter 'golint' is deprecated (since v1.41.0) due to: The repository of the linter has been archived by the owner. Replaced by revive. WARN [runner] The linter 'interfacer' is deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner. WARN [runner] The linter 'deadcode' is deprecated (since v1.49.0) due to: The owner seems to have abandoned the linter. Replaced by unused. Signed-off-by: Sebastiaan van Stijn --- .circleci/config.yml | 4 ++-- .golangci.yml | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ec896dc..65e4c00 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -50,8 +50,8 @@ jobs: steps: - checkout - go/install-golangci-lint: - prefix: v1.48.0 - version: 1.48.0 + prefix: v1.49.0 + version: 1.49.0 - go/install: {package: git} - run: name: Lint diff --git a/.golangci.yml b/.golangci.yml index bcefc07..8923200 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -32,7 +32,6 @@ linters: disable-all: true enable: - bodyclose - - deadcode - depguard - dogsled - errcheck @@ -42,11 +41,9 @@ linters: - goconst - gofmt - goimports - - golint - gosimple - govet - ineffassign - - interfacer - lll - maintidx - misspell @@ -56,13 +53,12 @@ linters: - nilnil - nolintlint - prealloc + - revive - staticcheck - - structcheck - stylecheck - typecheck - unconvert - unparam - unused - - varcheck - wastedassign - whitespace