# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

linters:
  disable-all: true
  enable:
    - deadcode
    - errcheck
    - gocritic
    - goconst
    - gofumpt
    - goimports
    - gosimple
    - govet
    - ineffassign
    - lll
    - misspell
    - staticcheck
    - stylecheck
    - typecheck
    - unconvert
    - varcheck
    - prealloc
    - unused
linters-settings:
  lll:
    line-length: 170
  goconst:
    min-occurrences: 4
  govet:
    check-shadowing: true
    enable:
      - fieldalignment
  misspell:
    locale: US
  unused:
    check-exported: false
  unparam:
    check-exported: false
  gocritic:
    enabled-checks:
      - appendCombine
      - argOrder
      - assignOp
      - badCond
      - boolExprSimplify
      - builtinShadow
      - captLocal
      - caseOrder
      - codegenComment
      - commentedOutCode
      - commentedOutImport
      - defaultCaseOrder
      - deprecatedComment
      - docStub
      - dupArg
      - dupBranchBody
      - dupCase
      - dupSubExpr
      - elseif
      - emptyFallthrough
      - equalFold
      - flagDeref
      - flagName
      - hexLiteral
      - indexAlloc
      - initClause
      - methodExprCall
      - nilValReturn
      - octalLiteral
      - offBy1
      - rangeExprCopy
      - regexpMust
      - sloppyLen
      - stringXbytes
      - switchTrue
      - typeAssertChain
      - typeSwitchVar
      - typeUnparen
      - underef
      - unlambda
      - unnecessaryBlock
      - unslice
      - valSwap
      - weakCond
run:
  deadline: 20m
  skip-files:
    - ".*\\.pb\\.go"
    - ".*\\.pb\\.validate\\.go"
    - ".*\\.gen\\.go"
issues:
  exclude-rules:
    - path: _test\.go$|^tests/|^samples/
      linters:
        - errcheck
        - maligned
    - linters:
        - staticcheck
      text: "SA1019: package github.com/golang/protobuf"
  max-per-linter: 0
  max-same-issues: 0
