run:
  timeout: 10m
linters:
  enable:
    - errcheck
    - goimports
    - revive
    - govet
    - staticcheck
    - misspell
    - gocritic
    - sqlclosecheck
    - rowserrcheck
    - nilerr
    - godot
    - forbidigo
    - mirror
    - bodyclose

issues:
  include:
    # https://golangci-lint.run/usage/configuration/#command-line-options
  exclude:
    - Rollback
    - logger.Sync
    - pgInstance.Stop
    - fmt.Printf
    - Enter(.*)_(.*)
    - Exit(.*)_(.*)

linters-settings:
  goimports:
    # Put imports beginning with prefix after 3rd-party packages.
    local-prefixes: github.com/usememos/memos
  revive:
    # Default to run all linters so that new rules in the future could automatically be added to the static check.
    enable-all-rules: true
    rules:
      # The following rules are too strict and make coding harder. We do not enable them for now.
      - name: file-header
        disabled: true
      - name: line-length-limit
        disabled: true
      - name: function-length
        disabled: true
      - name: max-public-structs
        disabled: true
      - name: function-result-limit
        disabled: true
      - name: banned-characters
        disabled: true
      - name: argument-limit
        disabled: true
      - name: cognitive-complexity
        disabled: true
      - name: cyclomatic
        disabled: true
      - name: confusing-results
        disabled: true
      - name: add-constant
        disabled: true
      - name: flag-parameter
        disabled: true
      - name: nested-structs
        disabled: true
      - name: import-shadowing
        disabled: true
      - name: early-return
        disabled: true
  gocritic:
    disabled-checks:
      - ifElseChain
  govet:
    settings:
      printf: # The name of the analyzer, run `go tool vet help` to see the list of all analyzers
        funcs: # Run `go tool vet help printf` to see the full configuration of `printf`.
          - common.Errorf
    enable-all: true
    disable:
      - fieldalignment
      - shadow
  forbidigo:
    forbid:
      - 'fmt\.Errorf(# Please use errors\.Wrap\|Wrapf\|Errorf instead)?'
      - 'ioutil\.ReadDir(# Please use os\.ReadDir)?'