# options for analysis running
run:
  # timeout for analysis, e.g. 30s, 5m, default is 1m
  timeout: 30m

# output configuration options
output:
  # sorts results by: filepath, line and column
  sort-results: true

# all available settings of specific linters
linters-settings:
  cyclop:
    # the maximal code complexity to report
    max-complexity: 30
    # the maximal average package complexity. If it's higher than 0.0 (float) the check is enabled (default 0.0)
    package-average: 0.0
    # should ignore tests (default false)
    skip-tests: true

  dogsled:
    # checks assignments with too many blank identifiers; default is 2
    max-blank-identifiers: 2

  dupl:
    # tokens count to trigger issue, 150 by default
    threshold: 100

  errcheck:
    # report about not checking of errors in type assertions: `a := b.(MyStruct)`;
    # default is false: such cases aren't reported by default.
    check-type-assertions: true

    # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
    # default is false: such cases aren't reported by default.
    check-blank: true

  errorlint:
    # Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveats
    errorf: true
    # Check for plain type assertions and type switches
    asserts: true
    # Check for plain error comparisons
    comparison: true

  exhaustive:
    # indicates that switch statements are to be considered exhaustive if a
    # 'default' case is present, even if all enum members aren't listed in the
    # switch
    default-signifies-exhaustive: true

  exhaustivestruct:
    # Struct Patterns is list of expressions to match struct packages and names
    # The struct packages have the form example.com/package.ExampleStruct
    # The matching patterns can use matching syntax from https://pkg.go.dev/path#Match
    # If this list is empty, all structs are tested.
    struct-patterns:

  gocognit:
    # minimal code complexity to report, 30 by default (but we recommend 10-20)
    min-complexity: 30

  nestif:
    # minimal complexity of if statements to report, 5 by default
    min-complexity: 4

  goconst:
    # minimal length of string constant, 3 by default
    min-len: 3
    # minimal occurrences count to trigger, 3 by default
    min-occurrences: 3

  gocritic:
    # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.
    # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
    enabled-tags:
      - diagnostic
      - style
      - performance
    disabled-checks:
      - paramTypeCombine
      - commentedOutCode
      - ifElseChain

    # Settings passed to gocritic.
    # The settings key is the name of a supported gocritic checker.
    # The list of supported checkers can be find in https://go-critic.github.io/overview.
    settings:
      unnamedResult:
        # whether to check exported functions
        checkExported: true

  gocyclo:
    # minimal code complexity to report, 30 by default (but we recommend 10-20)
    min-complexity: 30

  godot:
    # comments to be checked: `declarations`, `toplevel`, or `all`
    scope: declarations

    # check that each sentence starts with a capital letter
    capital: true

  gofmt:
    # simplify code: gofmt with `-s` option, true by default
    simplify: true

  gofumpt:
    # Choose whether or not to use the extra rules that are disabled
    # by default
    extra-rules: false

  golint:
    # minimal confidence for issues, default is 0.8
    min-confidence: 0.8

  gosimple:
    # Select the Go version to target. The default is '1.13'.
    go: "1.20"
    # https://staticcheck.io/docs/options#checks
    checks: ["all"]

  govet:
    # report about shadowed variables
    check-shadowing: true
    enable-all: true

  maligned:
    # print struct with more effective memory layout or not, false by default
    suggest-new: true

  misspell:
    # Correct spellings using locale preferences for US or UK.
    # Default is to use a neutral variety of English.
    # Setting locale to US will correct the British spelling of 'colour' to 'color'.
    locale: US

  prealloc:
    # XXX: we don't recommend using this linter before doing performance profiling.
    # For most programs usage of prealloc will be a premature optimization.

    # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.
    # True by default.
    simple: true
    range-loops: true
    for-loops: false

  nolintlint:
    # Enable to ensure that nolint directives are all used. Default is true.
    allow-unused: true
    # Disable to ensure that nolint directives don't have a leading space. Default is true.
    allow-leading-space: true
    # Exclude following linters from requiring an explanation.  Default is [].
    allow-no-explanation: []
    # Enable to require an explanation of nonzero length after each nolint directive. Default is false.
    require-explanation: true
    # Enable to require nolint directives to mention the specific linter being suppressed. Default is false.
    require-specific: true

  staticcheck:
    # Select the Go version to target. The default is '1.13'.
    go: "1.20"
    # https://staticcheck.io/docs/options#checks
    checks: ["all"]

  stylecheck:
    # Select the Go version to target. The default is '1.13'.
    go: "1.20"
    # https://staticcheck.io/docs/options#checks
    checks: ["all"]

  unparam:
    # Inspect exported functions, default is false. Set to true if no external program/library imports your code.
    # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:
    # if it's called for subdir of a project it can't find external interfaces. All text editor integrations
    # with golangci-lint call it on a directory with the changed file.
    check-exported: false

  unused:
    # Select the Go version to target. The default is '1.13'.
    go: "1.20"

  whitespace:
    multi-if: false # Enforces newlines (or comments) after every multi-line if statement
    multi-func: false # Enforces newlines (or comments) after every multi-line function signature

  wrapcheck:
    # An array of strings that specify substrings of signatures to ignore.
    # If this set, it will override the default set of ignored signatures.
    # See https://github.com/tomarrell/wrapcheck#configuration for more information.
    ignoreSigs:
      - .Errorf(
      - errors.New(
      - errors.Unwrap(
      - .Wrap(
      - .Wrapf(
      - .WithMessage(

linters:
  disable:
    # Don't check for newlines before return
    - nlreturn

    # Don't check line length
    - lll
    - funlen
    - exhaustivestruct

    # Don't check nested ifs
    - nestif

    # Don't check var length
    - varnamelen

    # Don't check excessive blank identifiers
    - dogsled

    # Don't check json struct field tags
    - tagliatelle

    # Absolutely useless whitespace linting
    - wsl

    # Cognitive complexity ;)
    - gocognit

    # Deprecated
    - golint
    - interfacer
    - scopelint

    # Don't care about this (for now)
    - exhaustruct
    - wrapcheck
    - nonamedreturns
    - gomnd
    - gosmopolitan
    - depguard

  enable-all: true
  fast: false

issues:
  # Fix found issues (if it's supported by the linter)
  fix: true


severity:
  # Default value is empty string.
  # Set the default severity for issues. If severity rules are defined and the issues
  # do not match or no severity is provided to the rule this will be the default
  # severity applied. Severities should match the supported severity names of the
  # selected out format.
  # - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity
  # -   Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity
  # -       Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-message
  default-severity: error

  # The default value is false.
  # If set to true severity-rules regular expressions become case sensitive.
  case-sensitive: false