# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

formatter:
  page_width: 120

linter:
  # The lint rules applied to this project can be customized in the
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  # included above or to enable additional rules. A list of all available lints
  # and their documentation is published at
  # https://dart.dev/tools/linter-rules
  #
  # Instead of disabling a lint rule for the entire project in the
  # section below, it can also be suppressed for a single line of code
  # or a specific dart file by using the `// ignore: name_of_lint` and
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  # producing the lint.

  rules:
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
    unawaited_futures: true
    use_build_context_synchronously: false
    require_trailing_commas: true
    unrelated_type_equality_checks: true
    prefer_const_constructors: true
    always_use_package_imports: true
    always_put_control_body_on_new_line: true

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
analyzer:
  exclude:
    - openapi/**
    - build/**
    - lib/generated_plugin_registrant.dart
    - lib/**/*.g.dart
    - lib/**/*.drift.dart

  # TODO: Re-enable after upgrading custom_lint
  # plugins:
  #   - custom_lint
  errors:
    unawaited_futures: warning
    always_put_control_body_on_new_line: warning

custom_lint:
  rules:
    - avoid_build_context_in_providers: false
    - avoid_public_notifier_properties: false
    - avoid_manual_providers_as_generated_provider_dependency: false
    - unsupported_provider_value: false

dart_code_metrics:
  rules:
    - banned-usage:
        entries:
          - name: debugPrint
            description: Use dPrint instead of debugPrint for proper tree-shaking in release builds.
            exclude-paths:
              - 'lib/utils/debug_print.dart'
            severity: perf
    # All rules from "recommended" preset
    # Show potential errors
  #  - avoid-cascade-after-if-null
  #  - avoid-collection-methods-with-unrelated-types
  #  - avoid-duplicate-exports
  #  - avoid-dynamic
  #  - avoid-missing-enum-constant-in-map
  #  - avoid-passing-async-when-sync-expected
  #  - avoid-throw-in-catch-block
    - avoid-unused-parameters
    - prefer-const-border-radius
    - prefer-declaring-const-constructor
    - prefer-switch-expression
