From 84caf56830e82ef2cdc4730bebb91427923b9512 Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:19:38 +0900 Subject: [PATCH 1/6] build: bump go version to 1.27 on `go.mod` --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index d25a27c..0f92424 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/kinbiko/jsonassert -go 1.22 +go 1.27 From 1726f9ef488f370af5b505c30d00bdd17a4d5b15 Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 16:36:43 +0900 Subject: [PATCH 2/6] build: bump `golangci-lint` version to 2.13.2 Commented out incompatible options in the pre-existing `.golangci.yml` and ran `golangci-lint migrate`. Resources: - https://golangci-lint.run/docs/product/migration-guide/ --- .golangci.bck.yml | 198 ++++++++++++++++++++++++ .golangci.yml | 380 +++++++++++++++++++++++----------------------- Makefile | 2 +- 3 files changed, 388 insertions(+), 192 deletions(-) create mode 100644 .golangci.bck.yml diff --git a/.golangci.bck.yml b/.golangci.bck.yml new file mode 100644 index 0000000..28af3d9 --- /dev/null +++ b/.golangci.bck.yml @@ -0,0 +1,198 @@ +run: + timeout: 1m + +linters-settings: + errcheck: + # report about not checking of errors in type assetions: `a := b.(MyStruct)`; + # default is false: such cases aren't reported by default. + check-type-assertions: true + + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; + # default is false: such cases aren't reported by default. + check-blank: false + + # [deprecated] comma-separated list of pairs of the form pkg:regex + # the regex is used to ignore names within pkg. (default "fmt:.*"). + # see https://github.com/kisielk/errcheck#the-deprecated-method for details + # ignore: fmt:.*,io/ioutil:^Read.* + + # path to a file containing a list of functions to exclude from checking + # see https://github.com/kisielk/errcheck#excluding-functions for details + # exclude: /path/to/file.txt + + funlen: + lines: 50 + statements: 40 + + govet: + # report about shadowed variables + # shadow: true + + # enable or disable analyzers by name + # enable: + # - atomicalign + enable-all: true + disable: + - fieldalignment + # disable-all: false + # revive: + # minimal confidence for issues, default is 0.8 + # min-confidence: 0.8 + gofmt: + # simplify code: gofmt with `-s` option, true by default + simplify: true + goimports: + # put imports beginning with prefix after 3rd-party packages; + # it's a comma-separated list of prefixes + local-prefixes: github.com/kinbiko/bugsnag + gocyclo: + # minimal code complexity to report, 30 by default (but we recommend 10-20) + # This check is set to an unreasonably low number by most developers' + # standards to track the code standard over time + min-complexity: 10 + gocognit: + # minimal code complexity to report, 30 by default (but we recommend 10-20) + # This check is a more useful cyclomatic complexity called cognitive complexity, + # where nested if/for is weighted more, and only one point regardless of + # cases in a switch. + min-complexity: 11 + dupl: + # tokens count to trigger issue, 150 by default + threshold: 100 + goconst: + # minimal length of string constant, 3 by default + min-len: 10 + # minimal occurrences count to trigger, 3 by default + min-occurrences: 3 + + # packages-with-error-messages: + # specify an error message to output when a blacklisted package is used + # github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" + misspell: + # Correct spellings using locale preferences for US or UK. + # Default is to use a neutral variety of English. + # Setting locale to US will correct the British spelling of 'colour' to 'color'. + locale: US + # ignore-words: + # - someword + lll: + # max line length, lines longer will be reported. Default is 120. + # '\t' is counted as 1 character by default, and can be changed with the tab-width option + line-length: 165 + # tab width in spaces. Default to 1. + tab-width: 4 + # unused: + # treat code as a program (not a library) and report unused exported identifiers; default is false. + # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find funcs usages. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + # check-exported: false + # unparam: + # Inspect exported functions, default is false. Set to true if no external program/library imports your code. + # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find external interfaces. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + # check-exported: true + nakedret: + # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 + # Naked returns can go plop itself + max-func-lines: 0 + prealloc: + # XXX: we don't recommend using this linter before doing performance profiling. + # For most programs usage of prealloc will be a premature optimization. + + # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. + # True by default. + simple: true + range-loops: true # Report preallocation suggestions on range loops, true by default + for-loops: false # Report preallocation suggestions on for loops, false by default + gocritic: + # Which checks should be enabled; can't be combined with 'disabled-checks'; + # See https://go-critic.github.io/overview#checks-overview + # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` + # By default list of stable checks is used. + # enabled-checks: + # - badCond + + # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty + # disabled-checks: + + # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. + # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". + enabled-tags: + - diagnostic + - style + - performance + + settings: # settings passed to gocritic + captLocal: # must be valid enabled check name + paramsOnly: true + rangeValCopy: + sizeThreshold: 64 + godox: + # report any comments starting with keywords, this is useful for TODO or FIXME comments that + # might be left in the code accidentally and should be resolved before merging + keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting + - TODO + - FIXME + dogsled: + # checks assignments with too many blank identifiers; default is 2 + max-blank-identifiers: 2 + + whitespace: + multi-if: false # Enforces newlines (or comments) after every multi-line if statement + multi-func: false # Enforces newlines (or comments) after every multi-line function signature + +linters: + disable: + - wsl + - godot + - nlreturn + + - depguard + + - gci # This conflicts with goimports + - varnamelen # This has too many false positives around indexes etc to be useful + presets: + - bugs + - complexity + - format + - performance + - style + - unused + fast: false + +issues: + # Excluding configuration per-path, per-linter, per-text and per-source + exclude-rules: + # Exclude some linters from running on tests files. + - path: _test\.go + linters: + - cyclop + - dupl + - errcheck + - errchkjson + - exhaustivestruct + - forbidigo + - funlen + - gocognit + - gocyclo + - gomnd + - lll + - stylecheck + - testpackage + - varnamelen + - maintidx + - path: \.go + linters: + - err113 + + # Independently from option `exclude` we use default exclude patterns, + # it can be disabled by this option. To list all + # excluded by default patterns execute `golangci-lint run --help`. + # Default value for this option is true. + exclude-use-default: false + # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + max-issues-per-linter: 0 + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 diff --git a/.golangci.yml b/.golangci.yml index 148ded9..d1c4cad 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,198 +1,196 @@ -run: - timeout: 1m - -linters-settings: - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: true - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - # ignore: fmt:.*,io/ioutil:^Read.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - # exclude: /path/to/file.txt - - funlen: - lines: 50 - statements: 40 - - govet: - # report about shadowed variables - shadow: true - - # enable or disable analyzers by name - # enable: - # - atomicalign - enable-all: true - disable: - - fieldalignment - # disable-all: false - revive: - # minimal confidence for issues, default is 0.8 - min-confidence: 0.8 - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true - goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - local-prefixes: github.com/kinbiko/bugsnag - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - # This check is set to an unreasonably low number by most developers' - # standards to track the code standard over time - min-complexity: 10 - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - # This check is a more useful cyclomatic complexity called cognitive complexity, - # where nested if/for is weighted more, and only one point regardless of - # cases in a switch. - min-complexity: 11 - dupl: - # tokens count to trigger issue, 150 by default - threshold: 100 - goconst: - # minimal length of string constant, 3 by default - min-len: 10 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 - - # packages-with-error-messages: - # specify an error message to output when a blacklisted package is used - # github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" - misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - # ignore-words: - # - someword - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 165 - # tab width in spaces. Default to 1. - tab-width: 4 - unused: - # treat code as a program (not a library) and report unused exported identifiers; default is false. - # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find funcs usages. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: true - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - # Naked returns can go plop itself - max-func-lines: 0 - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. - # enabled-checks: - # - badCond - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - # disabled-checks: - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - diagnostic - - style - - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 64 - godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting - - TODO - - FIXME - dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 - - whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature - +version: "2" linters: + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - dogsled + - dupl + - durationcheck + - err113 + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godox + - goheader + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosmopolitan + - grouper + - iface + - importas + - inamedparam + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testifylint + - testpackage + - tparallel + - unconvert + - unparam + - usestdlibvars + - wastedassign + - whitespace + - wrapcheck + - zerologlint disable: - - wsl + - depguard - godot - nlreturn - - - depguard - - - gci # This conflicts with goimports - - varnamelen # This has too many false positives around indexes etc to be useful - presets: - - bugs - - complexity - - format - - performance - - style - - unused - fast: false - + - varnamelen + - wsl + settings: + dogsled: + max-blank-identifiers: 2 + dupl: + threshold: 100 + errcheck: + check-type-assertions: true + check-blank: false + funlen: + lines: 50 + statements: 40 + gocognit: + min-complexity: 11 + goconst: + min-len: 10 + min-occurrences: 3 + gocritic: + enabled-tags: + - diagnostic + - style + - performance + settings: + captLocal: + paramsOnly: true + rangeValCopy: + sizeThreshold: 64 + gocyclo: + min-complexity: 10 + godox: + keywords: + - TODO + - FIXME + govet: + disable: + - fieldalignment + enable-all: true + lll: + line-length: 165 + tab-width: 4 + misspell: + locale: US + nakedret: + max-func-lines: 0 + prealloc: + simple: true + range-loops: true + for-loops: false + whitespace: + multi-if: false + multi-func: false + exclusions: + generated: lax + rules: + - linters: + - cyclop + - dupl + - errcheck + - errchkjson + - exhaustivestruct + - forbidigo + - funlen + - gocognit + - gocyclo + - lll + - maintidx + - mnd + - staticcheck + - testpackage + - varnamelen + path: _test\.go + - linters: + - err113 + path: \.go + paths: + - third_party$ + - builtin$ + - examples$ issues: - # Excluding configuration per-path, per-linter, per-text and per-source - exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: - - cyclop - - dupl - - errcheck - - errchkjson - - exhaustivestruct - - forbidigo - - funlen - - gocognit - - gocyclo - - gomnd - - lll - - stylecheck - - testpackage - - varnamelen - - maintidx - - path: \.go - linters: - - err113 - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. max-issues-per-linter: 0 - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. max-same-issues: 0 +formatters: + enable: + - gofmt + - gofumpt + - goimports + settings: + gofmt: + simplify: true + goimports: + local-prefixes: + - github.com/kinbiko/bugsnag + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/Makefile b/Makefile index dfa429b..7cfa188 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -LINTER_VERSION := v1.61.0 +LINTER_VERSION := v2.13.2 .PHONY: check check: lint test From 9c5030ebf32359656bdad4952993879fafdf8a28 Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 16:37:15 +0900 Subject: [PATCH 3/6] ci: update build job on `go.yml` GitHub action --- .github/workflows/go.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 7fefcc7..cdcc5b3 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -6,9 +6,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v7 with: - go-version: 1.22 + go-version: 1.27 id: go - name: Check out code into the Go module directory From a1958ba860a1387940e7d5f6748aa601f7485416 Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 17:11:33 +0900 Subject: [PATCH 4/6] build: update `golangci-lint` install url The `make` command was failing at the golangci-lint install step due to a checksum verification error. Switched to the new install url. Resources: - https://github.com/golangci/golangci-lint/issues/6745 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7cfa188..31a1681 100644 --- a/Makefile +++ b/Makefile @@ -20,5 +20,5 @@ coverage: go test -race -v -coverprofile=profile.cov -covermode=atomic ./... bin/linter: Makefile - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ./bin $(LINTER_VERSION) + curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b ./bin $(LINTER_VERSION) mv ./bin/golangci-lint ./bin/linter From 2859e9f5d9f8c8c44b5391afb9235f7973f3f1cd Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 17:14:22 +0900 Subject: [PATCH 5/6] chore: ignore test coverage report using `.gitignore` --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c6ed486..e984e7e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ tags bin/ + +profile.cov \ No newline at end of file From 0f3f8471fd8d61a82276213208b1c2895f8d9dda Mon Sep 17 00:00:00 2001 From: Sebastian Carrera <50601725+sbcrvl@users.noreply.github.com> Date: Sat, 12 Sep 2026 18:33:58 +0900 Subject: [PATCH 6/6] build: trim linter config to the standard set The v1 -> v2 config migration expanded the old presets into a huge explicit enable list. Slim it back down to `default: standard` plus the linters we actually configure, keep the old disable list as a guard, and silence the staticcheck quickfix that wants to rewrite upstream's `a.tt.` selector style. --- .golangci.bck.yml | 198 ---------------------------------------------- .golangci.yml | 101 ++++------------------- 2 files changed, 14 insertions(+), 285 deletions(-) delete mode 100644 .golangci.bck.yml diff --git a/.golangci.bck.yml b/.golangci.bck.yml deleted file mode 100644 index 28af3d9..0000000 --- a/.golangci.bck.yml +++ /dev/null @@ -1,198 +0,0 @@ -run: - timeout: 1m - -linters-settings: - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: true - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - - # [deprecated] comma-separated list of pairs of the form pkg:regex - # the regex is used to ignore names within pkg. (default "fmt:.*"). - # see https://github.com/kisielk/errcheck#the-deprecated-method for details - # ignore: fmt:.*,io/ioutil:^Read.* - - # path to a file containing a list of functions to exclude from checking - # see https://github.com/kisielk/errcheck#excluding-functions for details - # exclude: /path/to/file.txt - - funlen: - lines: 50 - statements: 40 - - govet: - # report about shadowed variables - # shadow: true - - # enable or disable analyzers by name - # enable: - # - atomicalign - enable-all: true - disable: - - fieldalignment - # disable-all: false - # revive: - # minimal confidence for issues, default is 0.8 - # min-confidence: 0.8 - gofmt: - # simplify code: gofmt with `-s` option, true by default - simplify: true - goimports: - # put imports beginning with prefix after 3rd-party packages; - # it's a comma-separated list of prefixes - local-prefixes: github.com/kinbiko/bugsnag - gocyclo: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - # This check is set to an unreasonably low number by most developers' - # standards to track the code standard over time - min-complexity: 10 - gocognit: - # minimal code complexity to report, 30 by default (but we recommend 10-20) - # This check is a more useful cyclomatic complexity called cognitive complexity, - # where nested if/for is weighted more, and only one point regardless of - # cases in a switch. - min-complexity: 11 - dupl: - # tokens count to trigger issue, 150 by default - threshold: 100 - goconst: - # minimal length of string constant, 3 by default - min-len: 10 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 3 - - # packages-with-error-messages: - # specify an error message to output when a blacklisted package is used - # github.com/sirupsen/logrus: "logging is allowed only by logutils.Log" - misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - # ignore-words: - # - someword - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 165 - # tab width in spaces. Default to 1. - tab-width: 4 - # unused: - # treat code as a program (not a library) and report unused exported identifiers; default is false. - # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find funcs usages. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - # check-exported: false - # unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - # check-exported: true - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - # Naked returns can go plop itself - max-func-lines: 0 - prealloc: - # XXX: we don't recommend using this linter before doing performance profiling. - # For most programs usage of prealloc will be a premature optimization. - - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. - # enabled-checks: - # - badCond - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty - # disabled-checks: - - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - diagnostic - - style - - performance - - settings: # settings passed to gocritic - captLocal: # must be valid enabled check name - paramsOnly: true - rangeValCopy: - sizeThreshold: 64 - godox: - # report any comments starting with keywords, this is useful for TODO or FIXME comments that - # might be left in the code accidentally and should be resolved before merging - keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting - - TODO - - FIXME - dogsled: - # checks assignments with too many blank identifiers; default is 2 - max-blank-identifiers: 2 - - whitespace: - multi-if: false # Enforces newlines (or comments) after every multi-line if statement - multi-func: false # Enforces newlines (or comments) after every multi-line function signature - -linters: - disable: - - wsl - - godot - - nlreturn - - - depguard - - - gci # This conflicts with goimports - - varnamelen # This has too many false positives around indexes etc to be useful - presets: - - bugs - - complexity - - format - - performance - - style - - unused - fast: false - -issues: - # Excluding configuration per-path, per-linter, per-text and per-source - exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: - - cyclop - - dupl - - errcheck - - errchkjson - - exhaustivestruct - - forbidigo - - funlen - - gocognit - - gocyclo - - gomnd - - lll - - stylecheck - - testpackage - - varnamelen - - maintidx - - path: \.go - linters: - - err113 - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: false - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-issues-per-linter: 0 - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. - max-same-issues: 0 diff --git a/.golangci.yml b/.golangci.yml index d1c4cad..dd54069 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,102 +1,29 @@ version: "2" linters: + # `standard` enables errcheck, govet, ineffassign, staticcheck, unused: https://golangci-lint.run/docs/linters/#all-linters + default: standard + # Linters explicitly enabled on top of `standard`: only those with deliberately configured thresholds below. enable: - - asasalint - - asciicheck - - bidichk - - bodyclose - - canonicalheader - - containedctx - - contextcheck - - copyloopvar - - cyclop - - decorder - dogsled - dupl - - durationcheck - - err113 - - errchkjson - - errname - - errorlint - - exhaustive - - exhaustruct - - exptostd - - fatcontext - - forbidigo - - forcetypeassert - funlen - - ginkgolinter - - gocheckcompilerdirectives - - gochecknoglobals - - gochecknoinits - - gochecksumtype - gocognit - goconst - gocritic - gocyclo - godox - - goheader - - gomoddirectives - - gomodguard - - goprintffuncname - - gosec - - gosmopolitan - - grouper - - iface - - importas - - inamedparam - - interfacebloat - - intrange - - ireturn - lll - - loggercheck - - maintidx - - makezero - - mirror - misspell - - mnd - - musttag - nakedret - - nestif - - nilerr - - nilnesserr - - nilnil - - noctx - - nolintlint - - nonamedreturns - - nosprintfhostport - - paralleltest - - perfsprint - prealloc - - predeclared - - promlinter - - protogetter - - reassign - - recvcheck - - revive - - rowserrcheck - - sloglint - - spancheck - - sqlclosecheck - - staticcheck - - tagalign - - tagliatelle - - testifylint - - testpackage - - tparallel - - unconvert - - unparam - - usestdlibvars - - wastedassign - whitespace - - wrapcheck - - zerologlint + # Not in `standard`; kept as a documented guard in case they're ever promoted, recording past rejections. disable: - - depguard + - wsl - godot - nlreturn - - varnamelen - - wsl + - depguard + - varnamelen # This has too many false positives around indexes etc to be useful settings: dogsled: max-blank-identifiers: 2 @@ -113,6 +40,7 @@ linters: goconst: min-len: 10 min-occurrences: 3 + ignore-tests: true gocritic: enabled-tags: - diagnostic @@ -144,6 +72,11 @@ linters: simple: true range-loops: true for-loops: false + staticcheck: + # QF1008 keeps suggesting dropping the `tt.` prefix; to preserve the original Asserter API we're choosing to ignore this warning. + checks: + - all + - -QF1008 whitespace: multi-if: false multi-func: false @@ -151,25 +84,18 @@ linters: generated: lax rules: - linters: - - cyclop - dupl - errcheck - errchkjson - - exhaustivestruct - forbidigo - funlen - gocognit - gocyclo - lll - - maintidx - mnd - staticcheck - testpackage - - varnamelen path: _test\.go - - linters: - - err113 - path: \.go paths: - third_party$ - builtin$ @@ -181,6 +107,7 @@ formatters: enable: - gofmt - gofumpt + # `gci` deliberately unused ("conflicts with goimports"); import formatters live in this section since v2. - goimports settings: gofmt: