analysis_options.yaml 8.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# 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
#
# There are other similar analysis options files in the flutter repos,
# which should be kept in sync with this file:
#
#   - analysis_options.yaml (this file)
#   - packages/flutter/lib/analysis_options_user.yaml
#   - https://github.com/flutter/plugins/blob/master/analysis_options.yaml
#   - https://github.com/flutter/engine/blob/master/analysis_options.yaml
#
# This file contains the analysis options used by Flutter tools, such as IntelliJ,
# Android Studio, and the `flutter analyze` command.
20 21

analyzer:
22 23
  strong-mode:
    implicit-dynamic: false
24
  errors:
25 26 27 28 29 30
    # treat missing required parameters as a warning (not a hint)
    missing_required_param: warning
    # treat missing returns as a warning (not a hint)
    missing_return: warning
    # allow having TODOs in the code
    todo: ignore
31 32 33
    # Ignore analyzer hints for updating pubspecs when using Future or
    # Stream and not importing dart:async
    # Please see https://github.com/flutter/flutter/pull/24528 for details.
34
    sdk_version_async_exported_from_core: ignore
35
  exclude:
36
    - "bin/cache/**"
37 38
    # the following two are relative to the stocks example and the flutter package respectively
    # see https://github.com/dart-lang/sdk/issues/28463
39 40
    - "lib/i18n/stock_messages_*.dart"
    - "lib/src/http/**"
41 42 43 44 45 46 47 48 49 50 51 52 53 54

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 # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
    - always_require_non_null_named_parameters
    - always_specify_types
    - annotate_overrides
    # - avoid_annotating_with_dynamic # conflicts with always_specify_types
    - avoid_as
55
    - avoid_bool_literals_in_conditional_expressions
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
    # - avoid_catches_without_on_clauses # we do this commonly
    # - avoid_catching_errors # we do this commonly
    - avoid_classes_with_only_static_members
    # - avoid_double_and_int_checks # only useful when targeting JS runtime
    - avoid_empty_else
    - avoid_field_initializers_in_const_classes
    - avoid_function_literals_in_foreach_calls
    # - avoid_implementing_value_types # not yet tested
    - avoid_init_to_null
    # - avoid_js_rounded_ints # only useful when targeting JS runtime
    - avoid_null_checks_in_equality_operators
    # - avoid_positional_boolean_parameters # not yet tested
    # - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356)
    - 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 # not yet tested
    - avoid_returning_null_for_void
    # - avoid_returning_this # there are plenty of valid reasons to return this
    # - avoid_setters_without_getters # not yet tested
    # - avoid_shadowing_type_parameters # not yet tested
    # - avoid_single_cascade_in_expression_statements # not yet tested
    - avoid_slow_async_io
    - avoid_types_as_parameter_names
    # - avoid_types_on_closure_parameters # conflicts with always_specify_types
    - avoid_unused_constructor_parameters
    - avoid_void_async
    - await_only_futures
    - camel_case_types
    - cancel_subscriptions
    # - cascade_invocations # not yet tested
    # - close_sinks # not reliable enough
    # - comment_references # blocked on https://github.com/flutter/flutter/issues/20765
    # - 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 # not yet tested
93
    # - diagnostic_describe_all_properties # not yet tested
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
    - directives_ordering
    - empty_catches
    - empty_constructor_bodies
    - empty_statements
    # - file_names # not yet tested
    - flutter_style_todos
    - hash_and_equals
    - implementation_imports
    # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
    - iterable_contains_unrelated_type
    # - join_return_with_assignment # not yet tested
    - library_names
    - library_prefixes
    # - lines_longer_than_80_chars # not yet tested
    - list_remove_unrelated_type
    # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181
    - no_adjacent_strings_in_list
    - no_duplicate_case_values
    - non_constant_identifier_names
    # - null_closures  # not yet tested
    # - omit_local_variable_types # opposite of always_specify_types
    # - one_member_abstracts # too many false positives
    # - only_throw_errors # https://github.com/flutter/flutter/issues/5792
    - overridden_fields
    - package_api_docs
    - package_names
    - package_prefixed_library_names
    # - parameter_assignments # we do this commonly
    - prefer_adjacent_string_concatenation
    - prefer_asserts_in_initializer_lists
124
    # - prefer_asserts_with_message # not yet tested
125
    - prefer_collection_literals
126
    - prefer_conditional_assignment
Dan Field's avatar
Dan Field committed
127
    - prefer_const_constructors
128 129 130 131 132
    - prefer_const_constructors_in_immutables
    - prefer_const_declarations
    - prefer_const_literals_to_create_immutables
    # - prefer_constructors_over_static_methods # not yet tested
    - prefer_contains
133
    # - prefer_double_quotes # opposite of prefer_single_quotes
134 135 136
    - prefer_equal_for_default_values
    # - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods
    - prefer_final_fields
137
    # - prefer_final_in_for_each # not yet tested
138
    - prefer_final_locals
139
    # - prefer_for_elements_to_map_fromIterable # not yet tested
140 141 142
    - prefer_foreach
    # - prefer_function_declarations_over_variables # not yet tested
    - prefer_generic_function_type_aliases
143
    - prefer_if_elements_to_conditional_expressions
144
    - prefer_if_null_operators
145
    - prefer_initializing_formals
146
    - prefer_inlined_adds
147 148 149
    # - prefer_int_literals # not yet tested
    # - prefer_interpolation_to_compose_strings # not yet tested
    - prefer_is_empty
150
    - prefer_is_not_empty
151 152
    - prefer_iterable_whereType
    # - prefer_mixin # https://github.com/dart-lang/language/issues/32
153
    # - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932
154
    - prefer_single_quotes
155
    - prefer_spread_collections
156 157
    - prefer_typing_uninitialized_variables
    - prefer_void_to_null
158
    # - provide_deprecation_message # not yet tested
159 160 161
    # - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
    - recursive_getters
    - slash_for_doc_comments
162
    # - sort_child_properties_last # not yet tested
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
    - sort_constructors_first
    - sort_pub_dependencies
    - sort_unnamed_constructors_first
    - test_types_in_equals
    - throw_in_finally
    # - type_annotate_public_apis # subset of always_specify_types
    - type_init_formals
    # - unawaited_futures # too many false positives
    # - unnecessary_await_in_return # not yet tested
    - unnecessary_brace_in_string_interps
    - unnecessary_const
    - unnecessary_getters_setters
    # - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498
    - unnecessary_new
    - unnecessary_null_aware_assignments
    - unnecessary_null_in_if_null_operators
    - unnecessary_overrides
    - unnecessary_parenthesis
    - unnecessary_statements
    - unnecessary_this
    - unrelated_type_equality_checks
184
    # - unsafe_html # not yet tested
185
    - use_full_hex_values_for_flutter_colors
186 187 188 189 190 191 192
    # - use_function_type_syntax_for_parameters # not yet tested
    - use_rethrow_when_possible
    # - use_setters_to_change_properties # not yet tested
    # - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
    # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
    - valid_regexps
    # - void_checks # not yet tested