#
# 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.
#

# options for analysis running
run:
  issues-exit-code: 1
  skip-dirs-use-default: true
  modules-download-mode: readonly
  deadline: 5m

# settings of specific linters
linters-settings:
  errcheck:
    check-type-assertions: true
    check-blank: true
  golint:
    min-confidence: 0.8
  gofmt:
    simplify: true
  goimports:
    local-prefixes: github.com/apache/incubator-yunikorn
  govet:
    check-shadowing: true
  funlen:
    lines: 120
    statements: 80
  depguard:
    list-type: blacklist
    include-go-root: false
    packages:
      - github.com/sirupsen/logrus
      - github.com/stretchr/testify
    packages-with-error-messages:
      github.com/sirupsen/logrus: "logging is standardised via yunikorn logger and zap"
      github.com/stretchr/testify: "test assertions must use gotest.tools/assert"

# linters to use
linters:
  disable-all: true
  fast: false
  enable:
    - errcheck
    - unused
    - staticcheck
    - gosimple
    - structcheck
    - varcheck
    - ineffassign
    - deadcode
    - funlen
    - golint
    - gofmt
    - goimports
    - govet
    - goconst
    - depguard
    - nakedret
    - gocritic
    - godox
    - gosec
    - dogsled
    - whitespace

issues:
  exclude-use-default: true

  # Maximum issues count per one linter. Set to 0 to disable. Default is 50.
  max-issues-per-linter: 0

  # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
  max-same-issues: 0

  # Show only new issues: if there are unstaged changes or untracked files,
  # only those changes are analyzed, else only changes in HEAD~ are analyzed.
  # It's a super-useful option for integration of golangci-lint into existing
  # large codebase. It's not practical to fix all existing issues at the moment
  # of integration: much better don't allow issues in new code.
  # Default is false.
  new: false

  # Show only new issues created after git revision `REV`
  # new-from-rev: REV

  # Show only new issues created in git patch with set file path.
  # new-from-patch: path/to/patch/file

