include: package:flutter_lints/flutter.yaml

analyzer:
  errors:
    # Treat these as errors, not warnings.
    unused_import: error
    unused_local_variable: error
    dead_code: error
  exclude:
    - "fvm/**"
    - lib/data/db/database.g.dart
    - "**/*.g.dart"
    - "**/*.freezed.dart"
    # Vendored library — analyze only our own code
    - "packages/**"

linter:
  rules:
    # Style
    - prefer_single_quotes
    - prefer_const_constructors
    - prefer_const_declarations
    - prefer_final_locals
    - prefer_final_in_for_each
    - unnecessary_const
    - unnecessary_new
    - unnecessary_this
    - avoid_redundant_argument_values

    # Safety
    - avoid_catching_errors
    - avoid_dynamic_calls
    - avoid_empty_else
    - avoid_print
    - avoid_returning_null_for_void
    - avoid_type_to_string
    - cancel_subscriptions
    - close_sinks
    - literal_only_boolean_expressions
    - no_duplicate_case_values
    - throw_in_finally
    - unawaited_futures

    # Correctness
    - always_declare_return_types
    - annotate_overrides
    - empty_catches            # flag silent catch{} — use comment if intentional
    - hash_and_equals
    - use_rethrow_when_possible
    - valid_regexps

    # Async
    - discarded_futures
    - unnecessary_await_in_return

    # Widget best practices
    - use_super_parameters
    - use_key_in_widget_constructors

    # API clarity
    - avoid_positional_boolean_parameters

    # Imports and style
    - always_use_package_imports
    - directives_ordering
    - curly_braces_in_flow_control_structures
    - require_trailing_commas
