# Specify analysis options.
#
# Until there are meta linter rules, each desired lint must be explicitly enabled.
# See: https://github.com/dart-lang/linter/issues/288
#
# For a list of lints, see: http://dart-lang.github.io/linter/lints/
# See the configuration guide for more
# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer

analyzer:
  strong-mode:
    implicit-dynamic: false
  errors:
    # treat missing required parameters as a warning (not a hint)
    missing_required_param: warning
    # allow type narrowing
    strong_mode_down_cast_composite: ignore
    # allow having TODOs in the code
    todo: ignore

linter:
  rules:
    # these rules are documented on and in the same order as
    # the Dart Lint rules page to make maintenance easier
    # http://dart-lang.github.io/linter/lints/

    # === error rules ===
    - avoid_empty_else
    - avoid_slow_async_io
    - comment_references
    - cancel_subscriptions
    # - close_sinks
    - control_flow_in_finally
    - empty_statements
    - hash_and_equals
    - invariant_booleans
    - iterable_contains_unrelated_type
    - list_remove_unrelated_type
    - literal_only_boolean_expressions
    - test_types_in_equals
    - throw_in_finally
    - unrelated_type_equality_checks
    - valid_regexps

    # === style rules ===
    - always_declare_return_types
    # - always_specify_types
    - annotate_overrides
    - avoid_as
    - avoid_init_to_null
    - avoid_return_types_on_setters
    - await_only_futures
    - camel_case_types
    - constant_identifier_names
    - empty_constructor_bodies
    - implementation_imports
    - library_names
    - library_prefixes
    - non_constant_identifier_names
    # - one_member_abstracts
    # - only_throw_errors
    - overridden_fields
    - package_api_docs
    - package_prefixed_library_names
    - prefer_equal_for_default_values
    - prefer_final_locals
    - prefer_generic_function_type_aliases
    - prefer_is_not_empty
    # - public_member_api_docs
    - slash_for_doc_comments
    - sort_constructors_first
    - sort_unnamed_constructors_first
    - type_annotate_public_apis # subset of always_specify_types
    - type_init_formals
    - unnecessary_brace_in_string_interps
    - unnecessary_const
    - unnecessary_getters_setters
    - unnecessary_new

    # === pub rules ===
    - package_names
