run:
  timeout: 5m
linters:
  enable:
    # region General

    # Add depguard to prevent adding additional dependencies. This is a client library, we really don't want
    # additional dependencies.
    - depguard
    # Prevent improper directives in go.mod.
    - gomoddirectives
    # Prevent improper nolint directives.
    - nolintlint

    # endregion


    # region Code Quality and Comments

    # Inspect source code for potential security problems. This check has a fairly high false positive rate,
    # comment with // nolint:gosec where not relevant.
    - gosec
    # Replace golint.
    - revive
    # Complain about deeply nested if cases.
    - nestif
    # Prevent naked returns in long functions.
    - nakedret
    # Make Go code more readable.
    - gocritic
    # We don't want hidden global scope, so disallow global variables. You can disable this with
    # Check if comments end in a period. This helps prevent incomplete comment lines, such as half-written sentences.
    - godot
    # Complain about comments as these indicate incomplete code.
    - godox
    # Keep the cyclomatic complexity of functions to a reasonable level.
    - gocyclo
    # Complain about cognitive complexity of functions.
    - gocognit
    # Find repeated strings that could be converted into constants.
    - goconst
    # Complain about unnecessary type conversions.
    - unconvert
    # Complain about unused parameters. These should be replaced with underscores.
    - unparam
    # Check for non-ASCII identifiers.
    - asciicheck
    # Check for HTTP response body being closed. Sometimes, you may need to disable this using // nolint:bodyclose.
    - bodyclose
    # Check for duplicate code. You may want to disable this with // nolint:dupl if the source code is the same, but
    # legitimately exists for different reasons.
    - dupl
    # Check for pointers in loops. This is a typical bug source.
    - exportloopref
    # Enforce a reasonable function length of 60 lines or 40 instructions. In very rare cases you may want to disable
    # this with // nolint:funlen if there is absolutely no way to split the function in question.
    - funlen
    # Prevent dogsledding (mass-ignoring return values). This typically indicates missing error handling.
    - dogsled
    # Enforce consistent import aliases across all files.
    - importas
    # Make package imports always deterministic.
    - gci
    # Make code properly formatted.
    - gofmt
    # Prevent faulty error checks.
    - nilerr
    # Prevent direct error checks that won't work with wrapped errors.
    - errorlint
    # Find slice usage that could potentially be preallocated.
    - prealloc
    # Check for improper duration handling.
    - durationcheck
    # Enforce tests being in the _test package.
    - testpackage

    # endregion
linters-settings:
  depguard:
    list-type: whitelist
    include-go-root: false
    packages:
      - github.com/ovirt/go-ovirt
      - github.com/ovirt/go-ovirt-client-log/v2
      - github.com/google/uuid
  govet:
    enable-all: true
    check-shadowing: false
    disable:
      # Remove this in a future PR to optimize struct usage.
      - fieldalignment
      # We don't care about variable shadowing.
      - shadow
  stylecheck:
    checks:
      - all
issues:
  exclude-use-default: false