# 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
    - 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
