# This file is deprecated and only included in the framework to maintain
# backwards compatibility. DO NOT MAKE CHANGES TO THIS FILE.
#
# The recommended analyzer options for Flutter code (apps, packages, and
# plugins) outside the Flutter repositories are now defined by
# package:flutter_lints located at
# https://github.com/flutter/packages/tree/master/packages/flutter_lints
#
# Old documentation:
# This file contains the analysis options used by "flutter analyze" and the
# dartanalyzer when analyzing code outside the flutter repository. It isn't named
# 'analysis_options.yaml' because otherwise editors would use it when analyzing
# the flutter tool itself.

analyzer:
  errors:
    # treat missing required parameters as a warning (not a hint)
    missing_required_param: warning

linter:
  rules:
    # these rules are documented on and in the same order as
    # the Dart Lint rules page to make maintenance easier
    # https://github.com/dart-lang/linter/blob/master/example/all.yaml
    # - always_declare_return_types
    # - always_put_control_body_on_new_line
    # - always_put_required_named_parameters_first
    # - always_require_non_null_named_parameters
    # - always_specify_types
    # - always_use_package_imports
    # - annotate_overrides
    # - avoid_annotating_with_dynamic # conflicts with always_specify_types
    # - avoid_bool_literals_in_conditional_expressions
    # - avoid_catches_without_on_clauses
    # - avoid_catching_errors
    # - avoid_classes_with_only_static_members
    # - avoid_double_and_int_checks # only useful when targeting JS runtime
    # - avoid_dynamic_calls
    - avoid_empty_else
    # - avoid_equals_and_hash_code_on_mutable_classes
    # - avoid_escaping_inner_quotes
    # - avoid_field_initializers_in_const_classes
    # - avoid_function_literals_in_foreach_calls
    # - avoid_implementing_value_types
    - avoid_init_to_null
    # - avoid_js_rounded_ints # only useful when targeting JS runtime
    # - avoid_null_checks_in_equality_operators
    # - avoid_positional_boolean_parameters
    # - avoid_print
    # - avoid_private_typedef_functions
    # - avoid_redundant_argument_values
    # - avoid_relative_lib_imports
    # - avoid_renaming_method_parameters
    - avoid_return_types_on_setters
    # - avoid_returning_null # there are plenty of valid reasons to return null
    # - avoid_returning_null_for_future
    # - avoid_returning_null_for_void
    # - avoid_returning_this # there are plenty of valid reasons to return this
    # - avoid_setters_without_getters
    # - avoid_shadowing_type_parameters
    # - avoid_single_cascade_in_expression_statements
    # - avoid_slow_async_io
    # - avoid_type_to_string
    # - avoid_types_as_parameter_names
    # - avoid_types_on_closure_parameters # conflicts with always_specify_types
    # - avoid_unnecessary_containers
    # - avoid_unused_constructor_parameters
    # - avoid_void_async
    - avoid_web_libraries_in_flutter
    - await_only_futures
    # - camel_case_extensions
    - camel_case_types
    - cancel_subscriptions
    # - cascade_invocations
    # - cast_nullable_to_non_nullable
    - close_sinks
    # - comment_references # we do not presume as to what people want to reference in their dartdocs
    # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
    - control_flow_in_finally
    # - curly_braces_in_flow_control_structures
    # - deprecated_consistency
    # - diagnostic_describe_all_properties
    # - directives_ordering
    # - do_not_use_environment
    # - empty_catches
    - empty_constructor_bodies
    - empty_statements
    # - exhaustive_cases
    # - file_names
    # - flutter_style_todos
    - hash_and_equals
    - implementation_imports
    # - invariant_booleans
    # - iterable_contains_unrelated_type
    # - join_return_with_assignment
    # - leading_newlines_in_multiline_strings
    - library_names
    # - library_prefixes
    # - lines_longer_than_80_chars
    # - list_remove_unrelated_type
    # - literal_only_boolean_expressions
    # - missing_whitespace_between_adjacent_strings
    # - no_adjacent_strings_in_list
    # - no_default_cases
    # - no_duplicate_case_values
    # - no_logic_in_create_state
    # - no_runtimeType_toString
    - non_constant_identifier_names
    # - null_check_on_nullable_type_parameter
    # - null_closures
    # - omit_local_variable_types # opposite of always_specify_types
    # - one_member_abstracts
    # - only_throw_errors
    # - overridden_fields
    - package_api_docs
    - package_names
    - package_prefixed_library_names
    # - parameter_assignments
    # - prefer_adjacent_string_concatenation
    # - prefer_asserts_in_initializer_lists
    # - prefer_asserts_with_message
    # - prefer_collection_literals
    # - prefer_conditional_assignment
    # - prefer_const_constructors
    # - prefer_const_constructors_in_immutables
    # - prefer_const_declarations
    # - prefer_const_literals_to_create_immutables
    # - prefer_constructors_over_static_methods
    # - prefer_contains
    # - prefer_double_quotes # opposite of prefer_single_quotes
    # - prefer_equal_for_default_values
    # - prefer_expression_function_bodies
    # - prefer_final_fields
    # - prefer_final_in_for_each
    # - prefer_final_locals
    # - prefer_for_elements_to_map_fromIterable
    # - prefer_foreach
    # - prefer_function_declarations_over_variables
    # - prefer_generic_function_type_aliases
    # - prefer_if_elements_to_conditional_expressions
    # - prefer_if_null_operators
    # - prefer_initializing_formals
    # - prefer_inlined_adds
    # - prefer_int_literals
    # - prefer_interpolation_to_compose_strings
    # - prefer_is_empty
    - prefer_is_not_empty
    # - prefer_is_not_operator
    # - prefer_iterable_whereType
    # - prefer_mixin # https://github.com/dart-lang/language/issues/32
    # - prefer_null_aware_operators
    # - prefer_relative_imports
    # - prefer_single_quotes
    # - prefer_spread_collections
    # - prefer_typing_uninitialized_variables
    # - prefer_void_to_null
    # - provide_deprecation_message
    # - public_member_api_docs
    # - recursive_getters
    # - sized_box_for_whitespace
    - slash_for_doc_comments
    # - sort_child_properties_last
    # - sort_constructors_first
    # - sort_pub_dependencies
    # - sort_unnamed_constructors_first
    - test_types_in_equals
    - throw_in_finally
    # - tighten_type_of_initializing_formals
    # - type_annotate_public_apis # subset of always_specify_types
    - type_init_formals
    # - unawaited_futures
    # - unnecessary_await_in_return
    - unnecessary_brace_in_string_interps
    # - unnecessary_const
    # - unnecessary_final
    - unnecessary_getters_setters
    # - unnecessary_lambdas
    # - unnecessary_new
    # - unnecessary_null_aware_assignments
    # - unnecessary_null_checks
    # - unnecessary_null_in_if_null_operators
    # - unnecessary_nullable_for_final_variable_declarations
    # - unnecessary_overrides
    # - unnecessary_parenthesis
    # - unnecessary_raw_strings
    - unnecessary_statements
    # - unnecessary_string_escapes
    # - unnecessary_string_interpolations
    # - unnecessary_this
    - unrelated_type_equality_checks
    # - unsafe_html
    # - use_full_hex_values_for_flutter_colors
    # - use_function_type_syntax_for_parameters
    # - use_if_null_to_convert_nulls_to_bools
    # - use_is_even_rather_than_modulo
    # - use_key_in_widget_constructors
    # - use_late_for_private_fields_and_variables
    # - use_named_constants
    # - use_raw_strings
    # - use_rethrow_when_possible
    # - use_setters_to_change_properties
    # - use_string_buffers
    # - use_to_and_as_if_applicable
    - valid_regexps
    # - void_checks
