run:
  # timeout for analysis
  deadline: 4m

  # Linting uses a lot of memory. Keep it under control by only running a single
  # worker.
  concurrency: 1

  # Skip autogenerated files for mobile.
  skip-files:
    - "mobile\\/.*generated\\.go"

  skip-dirs:
    - channeldb/migration_01_to_11

  build-tags:
    - autopilotrpc
    - chainrpc
    - invoicesrpc
    - routerrpc
    - signrpc
    - walletrpc
    - watchtowerrpc
    - wtclientrpc

linters-settings:
  govet:
    # Don't report about shadowed variables
    check-shadowing: false
  gofmt:
    # simplify code: gofmt with `-s` option, true by default
    simplify: true

linters:
  enable-all: true
  disable:
  # Global variables are used in many places throughout the code base.
  - gochecknoglobals

  # Some lines are over 80 characters on purpose and we don't want to make them
  # even longer by marking them as 'nolint'.
  - lll

  # We don't care (enough) about misaligned structs to lint that.
  - maligned

  # We have long functions, especially in tests. Moving or renaming those would
  # trigger funlen problems that we may not want to solve at that time.
  - funlen

  # Disable for now as we haven't yet tuned the sensitivity to our codebase
  # yet.  Enabling by default for example, would also force new contributors to
  # potentially extensively refactor code, when they want to smaller change to
  # land.
  - gocyclo

  # Instances of table driven tests that don't pre-allocate shouldn't trigger
  # the linter.
  - prealloc

  # Init functions are used by loggers throughout the codebase.
  - gochecknoinits

issues:
  # Only show newly introduced problems.
  new-from-rev: 01f696afce2f9c0d4ed854edefa3846891d01d8a

  exclude-rules:
    # Exclude gosec from running for tests so that tests with weak randomness
    # (math/rand) will pass the linter.
    - path: _test\.go
      linters:
        - gosec