# Copyright 2020 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.

# This is a copy of //topaz/tools/analysis_options.yaml; we should revisit
# importing this instead after the flower shuffle.

analyzer:
  language:
    enableSuperMixins: true
  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_bool_in_asserts
    - 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
    - super_goes_last
    - test_types_in_equals
    - throw_in_finally
    - type_annotate_public_apis
    - type_init_formals
    - unawaited_futures
    - unnecessary_brace_in_string_interps
    - unnecessary_getters_setters
    - unnecessary_lambdas
    - 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
