run:
  timeout: 5m
  skip-files:
    - \.pb\.go$
    - \.pb\.validate\.go$
    - \.pb\.gw\.go$
    - \.gen\.go$
  skip-dirs:
    - mocks

linters:
  disable-all: true
  enable:
    - asasalint
    - asciicheck
    - bidichk
    - bodyclose
    - containedctx
    - dogsled
    - dupword
    - durationcheck
    - errcheck
    - errchkjson
    - exportloopref
    - goconst
    - gocritic
    - godot
    - gofmt
    - gci
    - goprintffuncname
    - gosec
    - gosimple
    - govet
    - importas
    - ineffassign
    - misspell
    - nakedret
    - nilerr
    - noctx
    - nolintlint
    - nosprintfhostport
    - prealloc
    - predeclared
    - revive
    - rowserrcheck
    - staticcheck
      #    - stylecheck
    - thelper
    - typecheck
    - unconvert
    - unparam
    - unused
    - usestdlibvars
    - whitespace

linters-settings:
  errcheck:
    exclude-functions:
    - (io.Closer).Close
  govet:
    check-shadowing: true
  gci:
    custom-order: false
    section-separators:
      - newLine
    sections:
      - standard # Standard section: captures all standard packages.
      - default # Default section: contains all imports that could not be matched to another section type.
      - blank # Blank section: contains all blank imports. This section is not present unless explicitly enabled.
      - dot # Dot section: contains all dot imports. This section is not present unless explicitly enabled.
  importas:
    no-unaliased: true
    alias:
      # Foundation libraries
      - pkg: git.sbercloud.tech/products/paas/shared/foundation/management-server
        alias: mgmtserver
  maligned:
    suggest-new: true
  goconst:
    min-len: 2
    min-occurrences: 2
  lll:
    line-length: 140
  revive:
    rules:
      # The following rules are recommended https://github.com/mgechev/revive#recommended-configuration
      - name: blank-imports
      - name: context-as-argument
      - name: context-keys-type
      - name: dot-imports
      - name: error-return
      - name: error-strings
      - name: error-naming
      #      - name: exported
      - name: if-return
      - name: increment-decrement
      - name: var-naming
      - name: var-declaration
      #      - name: package-comments
      - name: range
      - name: receiver-naming
      - name: time-naming
      - name: unexported-return
      - name: indent-error-flow
      - name: errorf
      - name: empty-block
      - name: superfluous-else
      - name: unused-parameter
      - name: unreachable-code
      - name: redefines-builtin-id
      #
      # Rules in addition to the recommended configuration above.
      #
      - name: bool-literal-in-expr
      - name: constant-logical-expr
  gosec:
    excludes:
      - G307 # Deferring unsafe method "Close" on type "\*os.File"
      - G108 # Profiling endpoint is automatically exposed on /debug/pprof
  gocritic:
    enabled-tags:
      - diagnostic
      - experimental
      - performance
    disabled-checks:
      - appendAssign
      - dupImport # https://github.com/go-critic/go-critic/issues/845
      - evalOrder
      - ifElseChain
      - octalLiteral
      - regexpSimplify
      - sloppyReassign
      - truncateCmp
      - typeDefFirst
      - unnamedResult
      - unnecessaryDefer
      - whyNoLint
      - wrapperFunc
      - rangeValCopy
      - hugeParam

issues:
  exclude-rules:
    - text: "at least one file in a package should have a package comment"
      linters:
        - stylecheck
    - text: "should have a package comment, unless it's in another file for this package"
      linters:
        - golint
    - text: "should have comment or be unexported"
      linters:
        - golint
    - path: _test\.go
      linters:
        - gosec
        - dupl
  exclude-use-default: false

output:
  # colored-line-number|line-number|json|tab|checkstyle, default is "colored-line-number"
  format: colored-line-number
  print-linter-name: true
