version: "2" # required to adjust maintainability checks
checks:
  # Methods or functions defined with a high number of arguments
  argument-count:
    config:
      threshold: 6
  # Boolean logic that may be hard to understand
  complex-logic:
    config:
      threshold: 4
  # Excessive lines of code within a single file
  file-lines:
    config:
      threshold: 900
  # Functions or methods that may be hard to understand. This is disabled as it doesn't appear to be a reliable metric.
  method-complexity:
    enabled: false
  # Classes defined with a high number of functions or methods.
  method-count:
    config:
      threshold: 21
  # Excessive lines of code within a single function or method
  method-lines:
    config:
      threshold: 500
  #  Deeply nested control structures like if or case
  nested-control-flow:
    config:
      threshold: 4
  # Functions or methods with a high number of return statements. This is disabled because Go encourages early returns.
  return-statements:
    enabled: false
  # Duplicate code which is not identical but shares the same structure (e.g. variable names may differ). This is disabled due to too many false trips.
  similar-code:
    enabled: false
  # Code that is identical in structure
  identical-code:
    config:
      threshold: # language-specific defaults. an override will affect all languages.
exclude_patterns:
  - "vendor/"
  - "static/"
  - "t/"
  - "mailserver/migrations"
  - "**/*/bindata.go"
  - "protocol/protobuf/*.pb.go"
  - "protocol/communities/migrations/migrations.go"
  - "protocol/encryption/migrations/migrations.go"
  - "protocol/internal/sqlite/migrations.go"
  - "protocol/migrations/migrations.go"
  - "protocol/pushnotificationclient/migrations/migrations.go"
  - "protocol/pushnotificationserver/migrations/migrations.go"
  - "protocol/transport/migrations/migrations.go"
  - "protocol/encryption/protocol_message.pb.go"
  - "images/qr-assets.go"