Files
2025-04-24 22:09:10 +02:00

347 lines
7.4 KiB
YAML

# Based on https://gist.github.com/maratori/47a4d00457a92aa426dbd48a18776322
version: "2"
issues:
max-same-issues: 50
formatters:
enable:
- gci
- gofmt
- gofumpt
- goimports
- golines
settings:
gci:
sections:
- standard
- default
- prefix(github.com/lovelaze/nebula-sync)
gofumpt:
module-path: github.com/lovelaze/nebula-sync
extra-rules: true
goimports:
local-prefixes:
- github.com/lovelaze/nebula-sync
golines:
max-len: 128
tab-len: 4
linters:
enable:
- asasalint
- asciicheck
- bidichk
- bodyclose
- canonicalheader
- copyloopvar
- cyclop
- depguard
- dupl
- durationcheck
- errcheck
- errname
- errorlint
- exhaustive
- exptostd
- fatcontext
- forbidigo
- funcorder
- funlen
- gocheckcompilerdirectives
- gochecksumtype
- gocognit
- goconst
- gocritic
- gocyclo
- godot
- gomoddirectives
- goprintffuncname
- gosec
- govet
- iface
- ineffassign
- intrange
- loggercheck
- makezero
- mirror
- mnd
- musttag
- nakedret
- nestif
- nilerr
- nilnesserr
- nilnil
- noctx
- nolintlint
- nonamedreturns
- nosprintfhostport
- perfsprint
- predeclared
- promlinter
- protogetter
- reassign
- recvcheck
- revive
- rowserrcheck
- sloglint
- spancheck
- sqlclosecheck
- staticcheck
- testableexamples
- testifylint
- tparallel
- unconvert
- unparam
- unused
- usestdlibvars
- usetesting
- wastedassign
- whitespace
- zerologlint
## should be evaluated
#- gochecknoglobals
#- gochecknoinits
#- testpackage
## you may want to enable
#- decorder
#- exhaustruct
#- ginkgolinter
#- godox
#- goheader
#- inamedparam
#- interfacebloat
#- ireturn
#- prealloc
#- tagalign
#- varnamelen
#- wrapcheck
## disabled
#- containedctx
#- contextcheck
#- dogsled
#- dupword
#- err113
#- errchkjson
#- forcetypeassert
#- gomodguard
#- gosmopolitan
#- grouper
#- importas
#- lll
#- maintidx
#- misspell
#- nlreturn
#- paralleltest
#- tagliatelle
#- thelper
#- wsl
# All settings can be found here https://github.com/golangci/golangci-lint/blob/HEAD/.golangci.reference.yml
settings:
cyclop:
max-complexity: 30
package-average: 10.0
depguard:
rules:
"deprecated":
files:
- "$all"
deny:
- pkg: github.com/golang/protobuf
desc: Use google.golang.org/protobuf instead, see https://developers.google.com/protocol-buffers/docs/reference/go/faq#modules
- pkg: github.com/satori/go.uuid
desc: Use github.com/google/uuid instead, satori's package is not maintained
- pkg: github.com/gofrs/uuid$
desc: Use github.com/gofrs/uuid/v5 or later, it was not a go module before v5
"non-test files":
files:
- "!$test"
deny:
- pkg: math/rand$
desc: Use math/rand/v2 instead, see https://go.dev/blog/randv2
"non-main files":
files:
- "!**/main.go"
deny:
- pkg: log$
desc: Use log/slog instead, see https://go.dev/blog/slog
errcheck:
check-type-assertions: true
exhaustive:
check:
- switch
- map
exhaustruct:
exclude:
# std libs
- ^net/http.Client$
- ^net/http.Cookie$
- ^net/http.Request$
- ^net/http.Response$
- ^net/http.Server$
- ^net/http.Transport$
- ^net/url.URL$
- ^os/exec.Cmd$
- ^reflect.StructField$
# public libs
- ^github.com/Shopify/sarama.Config$
- ^github.com/Shopify/sarama.ProducerMessage$
- ^github.com/mitchellh/mapstructure.DecoderConfig$
- ^github.com/prometheus/client_golang/.+Opts$
- ^github.com/spf13/cobra.Command$
- ^github.com/spf13/cobra.CompletionOptions$
- ^github.com/stretchr/testify/mock.Mock$
- ^github.com/testcontainers/testcontainers-go.+Request$
- ^github.com/testcontainers/testcontainers-go.FromDockerfile$
- ^golang.org/x/tools/go/analysis.Analyzer$
- ^google.golang.org/protobuf/.+Options$
- ^gopkg.in/yaml.v3.Node$
funcorder:
struct-method: false
funlen:
lines: 100
statements: 50
gochecksumtype:
default-signifies-exhaustive: false
gocognit:
min-complexity: 20
gocritic:
settings:
captLocal:
paramsOnly: false
underef:
skipRecvDeref: false
govet:
enable-all: true
disable:
- fieldalignment
- shadow
inamedparam:
skip-single-param: true
mnd:
ignored-functions:
- args.Error
- flag.Arg
- flag.Duration.*
- flag.Float.*
- flag.Int.*
- flag.Uint.*
- os.Chmod
- os.Mkdir.*
- os.OpenFile
- os.WriteFile
- prometheus.ExponentialBuckets.*
- prometheus.LinearBuckets
nakedret:
max-func-lines: 0
nolintlint:
allow-no-explanation: [ funlen, gocognit, golines ]
require-explanation: true
require-specific: true
perfsprint:
strconcat: false
reassign:
patterns:
- ".*"
rowserrcheck:
packages:
- github.com/jmoiron/sqlx
sloglint:
no-global: all
context: scope
staticcheck:
checks:
- all
# Incorrect or missing package comment.
- -ST1000
# Use consistent method receiver names.
- -ST1016
# Omit embedded fields from selector expression.
- -QF1008
usetesting:
os-temp-dir: true
revive:
enable-all-rules: true
rules:
- name: add-constant
disabled: true
- name: unused-parameter
disabled: true
- name: line-length-limit
disabled: true
- name: function-length
disabled: true
- name: max-public-structs
disabled: true
- name: import-shadowing
disabled: true
- name: cognitive-complexity
disabled: true
- name: nested-structs
disabled: true
- name: exported
disabled: true
- name: flag-parameter
disabled: true
- name: deep-exit
disabled: true
gosec:
excludes:
- G402
exclusions:
warn-unused: false
presets:
- std-error-handling
- common-false-positives
rules:
- source: 'TODO'
linters: [ godot ]
- text: 'should have a package comment'
linters: [ revive ]
- text: 'exported \S+ \S+ should have comment( \(or a comment on this block\))? or be unexported'
linters: [ revive ]
- text: 'package comment should be of the form ".+"'
source: '// ?(nolint|TODO)'
linters: [ revive ]
- text: 'comment on exported \S+ \S+ should be of the form ".+"'
source: '// ?(nolint|TODO)'
linters: [ revive, staticcheck ]
- path: '_test\.go'
linters:
- bodyclose
- dupl
- errcheck
- funlen
- goconst
- gosec
- noctx
- wrapcheck