diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 68e0aac71..7c6b70b21 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -69,9 +69,8 @@ jobs: uses: actions/setup-go@v5 with: go-version: 1.25.x - cache: false # managed by golangci-lint - - uses: golangci/golangci-lint-action@v6 + - uses: golangci/golangci-lint-action@v8 name: Install golangci-lint with: version: latest diff --git a/.golangci.yml b/.golangci.yml index 410fcfdc0..c1d0eafe5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,95 +1,93 @@ -output: - # Make output more digestible with quickfix in vim/emacs/etc. - sort-results: true - print-issued-lines: false +version: "2" + +issues: + # Print all issues reported by all linters. + max-issues-per-linter: 0 + max-same-issues: 0 linters: # We'll track the golangci-lint default linters manually # instead of letting them change without our control. - disable-all: true + default: none enable: # golangci-lint defaults: - - gosimple - govet - ineffassign - staticcheck - unused # Our own extras: - - gofumpt - - nolintlint # lints nolint directives - - revive - errorlint + - nolintlint # lints //nolint directives + - revive # License header check: - goheader -linters-settings: - govet: - # These govet checks are disabled by default, but they're useful. - enable: - - nilness - - reflectvaluecompare - - sortslice - - unusedwrite - - goheader: - values: - const: - COMPANY: 'Uber Technologies, Inc.' - regexp: - YEAR_RANGE: '\d{4}(-\d{4})?' - template: |- - Copyright (c) {{ YEAR_RANGE }} {{ COMPANY }} + settings: - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + # These govet checks are disabled by default, but they're useful. + govet: + enable: + - nilness + - reflectvaluecompare + - sortslice + - unusedwrite - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + goheader: + values: + const: + COMPANY: Uber Technologies, Inc. + regexp: + YEAR_RANGE: \d{4}(-\d{4})? + template: |- + Copyright (c) {{ YEAR_RANGE }} {{ COMPANY }} - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. -issues: - # Print all issues reported by all linters. - max-issues-per-linter: 0 - max-same-issues: 0 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. - # Don't ignore some of the issues that golangci-lint considers okay. - # This includes documenting all exported entities. - exclude-use-default: false + exclusions: + generated: lax + rules: + # Don't warn on unused parameters. + # Parameter names are useful; replacing them with '_' is undesirable. + - linters: [revive] + text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _' - exclude-rules: - # Don't warn on unused parameters. - # Parameter names are useful; replacing them with '_' is undesirable. - - linters: [revive] - text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _' + # staticcheck already has smarter checks for empty blocks. + # revive's empty-block linter has false positives. + # For example, as of writing this, the following is not allowed. + # for foo() { } + - linters: [revive] + text: 'empty-block: this block is empty, you can remove it' - # staticcheck already has smarter checks for empty blocks. - # revive's empty-block linter has false positives. - # For example, as of writing this, the following is not allowed. - # for foo() { } - - linters: [revive] - text: 'empty-block: this block is empty, you can remove it' + # It's okay if internal packages and examples in docs/ + # don't have package comments. + - linters: [revive] + path: .+/internal/.+|^internal/.+|^docs/.+ + text: should have a package comment - # It's okay if internal packages and examples in docs/ - # don't have package comments. - - linters: [revive] - path: '.+/internal/.+|^internal/.+|^docs/.+' - text: 'should have a package comment' + # It's okay for tests to use dot imports. + - linters: [revive] + path: _test\.go$ + text: should not use dot imports - # It's okay for tests to use dot imports. - - linters: [revive] - path: '_test\.go$' - text: 'should not use dot imports' +formatters: + enable: [gofumpt] + exclusions: + generated: lax diff --git a/Makefile b/Makefile index 528300b22..14685bb79 100644 --- a/Makefile +++ b/Makefile @@ -54,8 +54,7 @@ tidy-lint: @$(foreach mod,$(MODULES), \ (cd $(mod) && \ echo "[lint] tidy: $(mod)" && \ - go mod tidy && \ - git diff --exit-code -- go.mod go.sum) &&) true + go mod tidy -diff) &&) true .PHONY: fx-lint fx-lint: $(FXLINT) diff --git a/annotated_test.go b/annotated_test.go index 2baf39da5..fc05bba03 100644 --- a/annotated_test.go +++ b/annotated_test.go @@ -1342,8 +1342,7 @@ func TestAnnotate(t *testing.T) { app := NewForTest(t, fx.Provide( - //lint:ignore ST1008 we want to test error in the middle. - fx.Annotate(func() (*a, error, *a) { + fx.Annotate(func() (*a, error, *a) { //nolint:staticcheck // we want to test error in the middle. return &a{}, nil, &a{} }, fx.ResultTags(`name:"firstA"`, ``, `name:"secondA"`)), ), diff --git a/extract_test.go b/extract_test.go index bcc3bb2db..d034ab1df 100644 --- a/extract_test.go +++ b/extract_test.go @@ -185,7 +185,7 @@ func TestExtract(t *testing.T) { defer app.RequireStart().RequireStop() // Unexported fields are left unchanged. - assert.NotEqual(t, "foo", out.type4.foo) + assert.NotEqual(t, "foo", out.foo) }) t.Run("DuplicateFields", func(t *testing.T) {