|
|
@@ -1,97 +1,110 @@
|
|
|
+version: "2"
|
|
|
+# Configuration for how we run golangci-lint
|
|
|
+# Timeout of 5m was the default in v1.
|
|
|
+run:
|
|
|
+ timeout: 5m
|
|
|
linters:
|
|
|
# Don't enable any linters by default; just the ones that we explicitly
|
|
|
# enable in the list below.
|
|
|
- disable-all: true
|
|
|
+ default: none
|
|
|
enable:
|
|
|
- bidichk
|
|
|
- - gofmt
|
|
|
- - goimports
|
|
|
- govet
|
|
|
- misspell
|
|
|
- revive
|
|
|
-
|
|
|
-# Configuration for how we run golangci-lint
|
|
|
-run:
|
|
|
- timeout: 5m
|
|
|
-
|
|
|
-issues:
|
|
|
- # Excluding configuration per-path, per-linter, per-text and per-source
|
|
|
- exclude-rules:
|
|
|
- # These are forks of an upstream package and thus are exempt from stylistic
|
|
|
- # changes that would make pulling in upstream changes harder.
|
|
|
- - path: tempfork/.*\.go
|
|
|
- text: "File is not `gofmt`-ed with `-s` `-r 'interface{} -> any'`"
|
|
|
- - path: util/singleflight/.*\.go
|
|
|
- text: "File is not `gofmt`-ed with `-s` `-r 'interface{} -> any'`"
|
|
|
-
|
|
|
-# Per-linter settings are contained in this top-level key
|
|
|
-linters-settings:
|
|
|
- gofmt:
|
|
|
- rewrite-rules:
|
|
|
- - pattern: 'interface{}'
|
|
|
- replacement: 'any'
|
|
|
-
|
|
|
- govet:
|
|
|
+ settings:
|
|
|
# Matches what we use in corp as of 2023-12-07
|
|
|
- enable:
|
|
|
- - asmdecl
|
|
|
- - assign
|
|
|
- - atomic
|
|
|
- - bools
|
|
|
- - buildtag
|
|
|
- - cgocall
|
|
|
- - copylocks
|
|
|
- - deepequalerrors
|
|
|
- - errorsas
|
|
|
- - framepointer
|
|
|
- - httpresponse
|
|
|
- - ifaceassert
|
|
|
- - loopclosure
|
|
|
- - lostcancel
|
|
|
- - nilfunc
|
|
|
- - nilness
|
|
|
- - printf
|
|
|
- - reflectvaluecompare
|
|
|
- - shift
|
|
|
- - sigchanyzer
|
|
|
- - sortslice
|
|
|
- - stdmethods
|
|
|
- - stringintconv
|
|
|
- - structtag
|
|
|
- - testinggoroutine
|
|
|
- - tests
|
|
|
- - unmarshal
|
|
|
- - unreachable
|
|
|
- - unsafeptr
|
|
|
- - unusedresult
|
|
|
- settings:
|
|
|
- printf:
|
|
|
- # List of print function names to check (in addition to default)
|
|
|
- funcs:
|
|
|
- - github.com/tailscale/tailscale/types/logger.Discard
|
|
|
- # NOTE(andrew-d): this doesn't currently work because the printf
|
|
|
- # analyzer doesn't support type declarations
|
|
|
- #- github.com/tailscale/tailscale/types/logger.Logf
|
|
|
-
|
|
|
- revive:
|
|
|
- enable-all-rules: false
|
|
|
- ignore-generated-header: true
|
|
|
+ govet:
|
|
|
+ enable:
|
|
|
+ - asmdecl
|
|
|
+ - assign
|
|
|
+ - atomic
|
|
|
+ - bools
|
|
|
+ - buildtag
|
|
|
+ - cgocall
|
|
|
+ - copylocks
|
|
|
+ - deepequalerrors
|
|
|
+ - errorsas
|
|
|
+ - framepointer
|
|
|
+ - httpresponse
|
|
|
+ - ifaceassert
|
|
|
+ - loopclosure
|
|
|
+ - lostcancel
|
|
|
+ - nilfunc
|
|
|
+ - nilness
|
|
|
+ - printf
|
|
|
+ - reflectvaluecompare
|
|
|
+ - shift
|
|
|
+ - sigchanyzer
|
|
|
+ - sortslice
|
|
|
+ - stdmethods
|
|
|
+ - stringintconv
|
|
|
+ - structtag
|
|
|
+ - testinggoroutine
|
|
|
+ - tests
|
|
|
+ - unmarshal
|
|
|
+ - unreachable
|
|
|
+ - unsafeptr
|
|
|
+ - unusedresult
|
|
|
+ settings:
|
|
|
+ printf:
|
|
|
+ # List of print function names to check (in addition to default)
|
|
|
+ funcs:
|
|
|
+ - github.com/tailscale/tailscale/types/logger.Discard
|
|
|
+ # NOTE(andrew-d): this doesn't currently work because the printf
|
|
|
+ # analyzer doesn't support type declarations
|
|
|
+ #- github.com/tailscale/tailscale/types/logger.Logf
|
|
|
+ revive:
|
|
|
+ enable-all-rules: false
|
|
|
+ rules:
|
|
|
+ - name: atomic
|
|
|
+ - name: context-keys-type
|
|
|
+ - name: defer
|
|
|
+ arguments: [[
|
|
|
+ # Calling 'recover' at the time a defer is registered (i.e. "defer recover()") has no effect.
|
|
|
+ "immediate-recover",
|
|
|
+ # Calling 'recover' outside of a deferred function has no effect
|
|
|
+ "recover",
|
|
|
+ # Returning values from a deferred function has no effect
|
|
|
+ "return",
|
|
|
+ ]]
|
|
|
+ - name: duplicated-imports
|
|
|
+ - name: errorf
|
|
|
+ - name: string-of-int
|
|
|
+ - name: time-equal
|
|
|
+ - name: unconditional-recursion
|
|
|
+ - name: useless-break
|
|
|
+ - name: waitgroup-by-value
|
|
|
+ exclusions:
|
|
|
+ generated: lax
|
|
|
+ presets:
|
|
|
+ - comments
|
|
|
+ - common-false-positives
|
|
|
+ - legacy
|
|
|
+ - std-error-handling
|
|
|
rules:
|
|
|
- - name: atomic
|
|
|
- - name: context-keys-type
|
|
|
- - name: defer
|
|
|
- arguments: [[
|
|
|
- # Calling 'recover' at the time a defer is registered (i.e. "defer recover()") has no effect.
|
|
|
- "immediate-recover",
|
|
|
- # Calling 'recover' outside of a deferred function has no effect
|
|
|
- "recover",
|
|
|
- # Returning values from a deferred function has no effect
|
|
|
- "return",
|
|
|
- ]]
|
|
|
- - name: duplicated-imports
|
|
|
- - name: errorf
|
|
|
- - name: string-of-int
|
|
|
- - name: time-equal
|
|
|
- - name: unconditional-recursion
|
|
|
- - name: useless-break
|
|
|
- - name: waitgroup-by-value
|
|
|
+ # These are forks of an upstream package and thus are exempt from stylistic
|
|
|
+ # changes that would make pulling in upstream changes harder.
|
|
|
+ - path: tempfork/.*\.go
|
|
|
+ text: File is not `gofmt`-ed with `-s` `-r 'interface{} -> any'`
|
|
|
+ - path: util/singleflight/.*\.go
|
|
|
+ text: File is not `gofmt`-ed with `-s` `-r 'interface{} -> any'`
|
|
|
+ paths:
|
|
|
+ - third_party$
|
|
|
+ - builtin$
|
|
|
+ - examples$
|
|
|
+formatters:
|
|
|
+ enable:
|
|
|
+ - gofmt
|
|
|
+ - goimports
|
|
|
+ settings:
|
|
|
+ gofmt:
|
|
|
+ rewrite-rules:
|
|
|
+ - pattern: interface{}
|
|
|
+ replacement: any
|
|
|
+ exclusions:
|
|
|
+ generated: lax
|
|
|
+ paths:
|
|
|
+ - third_party$
|
|
|
+ - builtin$
|
|
|
+ - examples$
|