# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The analysis_options.yaml file at the repository root is the source of truth,
# and the other analysis_options.yaml files under dart packages directories are
# mere copies of it.
#
# The copy happens when you run "make" from the command line.
analyzer:
  exclude:
    - '**/generated/**'
linter:
  # Full list available at http://dart-lang.github.io/linter/lints/options/options.html.
  rules:
    - always_declare_return_types
    # This conflicts with the rules used by fx format-code:
    # - always_put_control_body_on_new_line
    - always_put_required_named_parameters_first
    - always_require_non_null_named_parameters
    # No longer useful with Dart 2.
    # - always_specify_types
    - annotate_overrides
    # Actively discouraged with Dart 2.
    # - avoid_annotating_with_dynamic
    # - avoid_as
    - avoid_bool_literals_in_conditional_expressions
    - avoid_catches_without_on_clauses
    - avoid_catching_errors
    - avoid_classes_with_only_static_members
    # JS only.
    # - avoid_double_and_int_checks
    - avoid_empty_else
    # Not compatible with VS Code yet.
    # - avoid_field_initializers_in_const_classes
    - avoid_function_literals_in_foreach_calls
    - avoid_init_to_null
    # JS only.
    # - avoid_js_rounded_ints
    - avoid_null_checks_in_equality_operators
    - avoid_positional_boolean_parameters
    - avoid_private_typedef_functions
    - avoid_relative_lib_imports
    # This puts an unnecessary burden on API clients.
    # - avoid_renaming_method_parameters
    - avoid_return_types_on_setters
    - avoid_returning_null
    - avoid_returning_this
    - avoid_single_cascade_in_expression_statements
    # Conflicts with our dependency injection convention.
    # - avoid_setters_without_getters
    - avoid_slow_async_io
    - avoid_types_as_parameter_names
    # Not requiring this yet as it requires extensive changes to code base.
    # - avoid_types_on_closure_parameters
    - avoid_unused_constructor_parameters
    - await_only_futures
    - camel_case_types
    - cancel_subscriptions
    - cascade_invocations
    - close_sinks
    - constant_identifier_names
    - control_flow_in_finally
    - directives_ordering
    - empty_catches
    - empty_constructor_bodies
    - empty_statements
    - hash_and_equals
    - implementation_imports
    - invariant_booleans
    - iterable_contains_unrelated_type
    - join_return_with_assignment
    - library_names
    - library_prefixes
    - list_remove_unrelated_type
    - literal_only_boolean_expressions
    - no_adjacent_strings_in_list
    - no_duplicate_case_values
    - non_constant_identifier_names
    # Not requiring this yet as it requires extensive changes to code base.
    # - omit_local_variable_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_collection_literals
    - prefer_conditional_assignment
    # Disabled until bug is fixed
    # https://github.com/dart-lang/linter/issues/995
    # - prefer_const_constructors
    - prefer_const_constructors_in_immutables
    - prefer_const_declarations
    # Disabled until bug is fixed
    # https://github.com/dart-lang/linter/issues/995
    # - prefer_const_literals_to_create_immutables
    - prefer_constructors_over_static_methods
    - prefer_contains
    - prefer_equal_for_default_values
    # Add this when 'short' is better defined.
    # - prefer_expression_function_bodies
    - prefer_final_fields
    # The cruft/value ratio of this rule seems low.
    # - prefer_final_locals
    - prefer_foreach
    - prefer_function_declarations_over_variables
    - prefer_generic_function_type_aliases
    - prefer_initializing_formals
    - prefer_interpolation_to_compose_strings
    - prefer_is_empty
    - prefer_is_not_empty
    - prefer_iterable_whereType
    - prefer_single_quotes
    - prefer_typing_uninitialized_variables
    # This seems to create some cruft.
    # Disable and evaluate if this is causing underdocumentation
    # - public_member_api_docs
    - recursive_getters
    - slash_for_doc_comments
    # Topaz codebase places fields before constructors
    # - sort_constructors_first
    - sort_unnamed_constructors_first
    - test_types_in_equals
    - throw_in_finally
    - type_annotate_public_apis
    - type_init_formals
    - unawaited_futures
    - unnecessary_brace_in_string_interps
    - unnecessary_const
    - unnecessary_getters_setters
    - unnecessary_lambdas
    - unnecessary_new
    - unnecessary_null_aware_assignments
    - unnecessary_null_in_if_null_operators
    - unnecessary_overrides
    # Turn on when https://github.com/dart-lang/linter/issues/997 is in flutter's version of dart.
    # - unnecessary_parenthesis
    - unnecessary_statements
    - unnecessary_this
    - unrelated_type_equality_checks
    - use_rethrow_when_possible
    - use_setters_to_change_properties
    - use_string_buffers
    - use_to_and_as_if_applicable
    - valid_regexps
    # Not compatible with VS Code yet.
    # - void_checks
