include: package:flutter_lints/flutter.yaml analyzer: strong-mode: implicit-casts: true # to be changed implicit-dynamic: true # to be changed errors: # 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 # Allow self-reference to deprecated members (we do this because otherwise we have # to annotate every member in every test, assert, etc, when we deprecate something) deprecated_member_use_from_same_package: ignore plugins: - riverpod_lint formatter: page_width: 100 trailing_commas: preserve plugins: riverpod_lint: 3.1.0 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: true always_put_control_body_on_new_line: true always_require_non_null_named_parameters: true always_specify_types: false # decided against using it for now annotate_overrides: true avoid_bool_literals_in_conditional_expressions: true avoid_classes_with_only_static_members: true avoid_dynamic_calls: false # to be changed avoid_empty_else: true avoid_equals_and_hash_code_on_mutable_classes: true avoid_escaping_inner_quotes: true avoid_field_initializers_in_const_classes: true avoid_function_literals_in_foreach_calls: true avoid_init_to_null: true avoid_null_checks_in_equality_operators: true avoid_relative_lib_imports: true avoid_renaming_method_parameters: true avoid_return_types_on_setters: true avoid_returning_null_for_void: true avoid_shadowing_type_parameters: true avoid_single_cascade_in_expression_statements: true avoid_slow_async_io: true avoid_type_to_string: true avoid_types_as_parameter_names: true avoid_unnecessary_containers: true avoid_unused_constructor_parameters: true avoid_void_async: false await_only_futures: true camel_case_extensions: true camel_case_types: false cancel_subscriptions: true cast_nullable_to_non_nullable: false # to be changed constant_identifier_names: false control_flow_in_finally: true deprecated_consistency: true directives_ordering: true empty_catches: false empty_constructor_bodies: true empty_statements: true exhaustive_cases: true file_names: true flutter_style_todos: false hash_and_equals: true implementation_imports: true iterable_contains_unrelated_type: true leading_newlines_in_multiline_strings: true library_names: true library_prefixes: true library_private_types_in_public_api: false list_remove_unrelated_type: true missing_whitespace_between_adjacent_strings: false no_adjacent_strings_in_list: true no_duplicate_case_values: true no_logic_in_create_state: true non_constant_identifier_names: true noop_primitive_operations: true null_check_on_nullable_type_parameter: true null_closures: true overridden_fields: true package_api_docs: true package_names: true package_prefixed_library_names: true prefer_adjacent_string_concatenation: true prefer_asserts_in_initializer_lists: true prefer_collection_literals: true prefer_conditional_assignment: true prefer_const_constructors: true prefer_const_constructors_in_immutables: true prefer_const_declarations: true prefer_const_literals_to_create_immutables: true prefer_contains: true prefer_equal_for_default_values: true prefer_final_fields: true prefer_final_in_for_each: true prefer_final_locals: true prefer_for_elements_to_map_fromIterable: true prefer_foreach: true prefer_function_declarations_over_variables: true prefer_generic_function_type_aliases: true prefer_if_elements_to_conditional_expressions: true prefer_if_null_operators: true prefer_initializing_formals: true prefer_inlined_adds: true prefer_interpolation_to_compose_strings: true prefer_is_empty: true prefer_is_not_empty: true prefer_is_not_operator: true prefer_iterable_whereType: true prefer_null_aware_operators: true prefer_single_quotes: true prefer_spread_collections: true prefer_typing_uninitialized_variables: true prefer_void_to_null: true provide_deprecation_message: true recursive_getters: true sized_box_for_whitespace: true slash_for_doc_comments: true sort_constructors_first: false # good for code readability but later sort_unnamed_constructors_first: true test_types_in_equals: true throw_in_finally: true tighten_type_of_initializing_formals: true type_init_formals: true unnecessary_await_in_return: true unnecessary_brace_in_string_interps: true unnecessary_const: true unnecessary_getters_setters: true unnecessary_new: true unnecessary_null_aware_assignments: true unnecessary_null_checks: true unnecessary_null_in_if_null_operators: true unnecessary_nullable_for_final_variable_declarations: true unnecessary_overrides: true unnecessary_parenthesis: true unnecessary_statements: true unnecessary_string_escapes: true unnecessary_string_interpolations: true unnecessary_this: true unrelated_type_equality_checks: true use_full_hex_values_for_flutter_colors: true use_function_type_syntax_for_parameters: true use_is_even_rather_than_modulo: true use_key_in_widget_constructors: false use_late_for_private_fields_and_variables: true use_named_constants: true use_raw_strings: true use_rethrow_when_possible: true use_test_throws_matchers: true valid_regexps: true void_checks: false dart_code_metrics: extends: - recommended rules: - avoid-shadowing: false # we shadow a lot, e.g. context in callbacks - avoid-unsafe-collection-methods: false # we use foo[index] where index may not exist in theory, but in practice they will, in tests. also we can just handle the exceptions when they occur - prefer-prefixed-global-constants: false # we don't really care for the 'k' prefix - prefer-single-widget-per-file: false - avoid-passing-self-as-argument: false # fairly harmless. and e.g. drift calls are like this - avoid-passing-async-when-sync-expected: false # we really like to do this in onTap() etc, and it seems harmless - prefer-match-file-name: false # dieter wants to enable this. but requires a lot of renames. what does roland think? formatter: indent: 0 cascading-widget-extensions: false