# More info on config here: https://golangci-lint.run/usage/configuration/#config-file
run:
  concurrency: 8
  timeout: 10m
  issues-exit-code: 1
  tests: true


output:
  formats:
    - format: colored-line-number
  print-issued-lines: true
  print-linter-name: true

linters-settings:
  gocyclo:
    min-complexity: 15
  gocognit:
    min-complexity: 20
  govet:
    enable:
      - shadow
  dupl:
    threshold: 100
  goconst:
    min-len:         2
    min-occurrences: 2

linters:
  disable-all: true
  enable:
    # - dupl - it's very slow, enable if you really know why you need it
    - errcheck
    - goconst
    - gocognit
    - gocyclo
    - goimports
    - gosec
    - govet
    - ineffassign
    - gosimple
    - staticcheck
    - revive
    - typecheck
    - unused # will be used insted of varcheck + deadcode + structcheck. More info https://github.com/golangci/golangci-lint/issues/1841

issues:
  exclude-dirs:
    - bin
    - vendor
    - var
    - tmp
  exclude-files:
    - \.pb\.go$
    - \.pb\.gw\.go$
    - \.pb\.scratch\.go$
    - \.pb\.goclay\.go$
  exclude-use-default: false
  exclude:
    # _ instead of err checks
    - G104
    # for "public interface + private struct implementation" cases only!
    - exported func .* returns unexported type .*, which can be annoying to use
    # can be removed in the development phase
    - (comment on exported (method|function|type|const)|should have( a package)? comment|comment should be of the form)
    # not for the active development - can be removed in the stable phase
    - should have a package comment
    - don't use an underscore in package name
    # EXC0001 errcheck: Almost all programs ignore errors on these functions and in most cases it's ok
    - Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
    - should check returned error before deferring
