Files
flutter/analysis_options.yaml
2026-01-13 16:31:44 +01:00

176 lines
6.6 KiB
YAML

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