## # Lint rules to be used for apps without developer facing API. i.e. command line tools and Flutter applications ## analyzer: strong-mode: # Will become the default once non-nullable types land # https://github.com/dart-lang/sdk/issues/31410#issuecomment-510683629 implicit-casts: true implicit-dynamic: true 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: info # Rules are in the same order (alphabetically) as documented at http://dart-lang.github.io/linter/lints # and https://github.com/dart-lang/linter/blob/master/example/all.yaml linter: rules: # Prevents accidental return type changes which results in a breaking API change. # Enforcing return type makes API changes visible in a diff # pedantic: enabled # http://dart-lang.github.io/linter/lints/always_declare_return_types.html - always_declare_return_types # Single line `if`s are fine as recommended in Effective Dart "DO format your code using dartfmt" # pedantic: disabled # http://dart-lang.github.io/linter/lints/always_put_control_body_on_new_line.html # - always_put_control_body_on_new_line # Flutter widgets always put a Key as first optional parameter which breaks this rule. # Also violates other orderings like matching the class fields or alphabetically. # pedantic: disabled # http://dart-lang.github.io/linter/lints/always_declare_return_types.html # - always_put_required_named_parameters_first # All non nullable named parameters should be and annotated with @required. # This allows API consumers to get warnings via lint rather than a crash a runtime. # Might become obsolete with Non-Nullable types # pedantic: enabled # http://dart-lang.github.io/linter/lints/always_require_non_null_named_parameters.html - always_require_non_null_named_parameters # Since dart 2.0 dart is a sound language, specifying types is not required anymore. # `var foo = 10;` is enough information for the compiler to make foo a int. # Violates Effective Dart "AVOID type annotating initialized local variables". # Makes code unnecessarily complex https://github.com/dart-lang/linter/issues/1620 # pedantic: disabled # http://dart-lang.github.io/linter/lints/always_specify_types.html # - always_specify_types # Protect against unintentionally overriding superclass members # pedantic: enabled # http://dart-lang.github.io/linter/lints/annotate_overrides.html - annotate_overrides # All methods should define a return type. dynamic is no exception. # Violates Effective Dart "PREFER annotating with dynamic instead of letting inference fail" # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_annotating_with_dynamic.html # - avoid_annotating_with_dynamic # A leftover from dart1, should be deprecated # pedantic: disabled # - https://github.com/dart-lang/linter/issues/1401 # http://dart-lang.github.io/linter/lints/avoid_as.html # - avoid_as # Highlights boolean expressions which can be simplified # http://dart-lang.github.io/linter/lints/avoid_bool_literals_in_conditional_expressions.html - avoid_bool_literals_in_conditional_expressions # There are no strong arguments to enable this rule because it is very strict. Catching anything is useful # and common even if not always the most correct thing to do. # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_catches_without_on_clauses.html # - avoid_catches_without_on_clauses # Errors aren't for catching but to prevent prior to runtime # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_catching_errors.html - avoid_catching_errors # Can usually be replaced with an extension # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_classes_with_only_static_members.html - avoid_classes_with_only_static_members # Never accidentally use dynamic invocations # Dart SDK: unreleased • (Linter vnull) # https://dart-lang.github.io/linter/lints/avoid_dynamic_calls.html # avoid_dynamic_calls # Only useful when targeting JS # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_double_and_int_checks.html # - avoid_double_and_int_checks # Prevents accidental empty else cases. See samples in documentation # pedantic: enabled # http://dart-lang.github.io/linter/lints/avoid_empty_else.html - avoid_empty_else # It is expected that mutable objects which override hash & equals shouldn't be used as keys for hashmaps. # This one use case doesn't make all hash & equals implementations for mutable classes bad. # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_equals_and_hash_code_on_mutable_classes.html # - avoid_equals_and_hash_code_on_mutable_classes # Use different quotes instead of escaping # Dart SDK: >= 2.8.0-dev.11.0 • (Linter v0.1.111) # https://dart-lang.github.io/linter/lints/avoid_escaping_inner_quotes.html - avoid_escaping_inner_quotes # Prevents unnecessary allocation of a field # pedantic: disabled # http://dart-lang.github.io/linter/lints/avoid_field_initializers_in_const_classes.html - avoid_field_initializers_in_const_classes # Prevents allocating a lambda and allows return/break/continue control flow statements inside the loop # http://dart-lang.github.io/linter/lints/avoid_function_literals_in_foreach_calls.html - avoid_function_literals_in_foreach_calls # Don't break value types by implementing them # http://dart-lang.github.io/linter/lints/avoid_implementing_value_types.html - avoid_implementing_value_types # Removes redundant `= null;` # https://dart-lang.github.io/linter/lints/avoid_init_to_null.html - avoid_init_to_null # Only useful when targeting JS # Warns about too large integers when compiling to JS # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_js_rounded_ints.html # - avoid_js_rounded_ints # Null checks aren't required in ==() operators # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_null_checks_in_equality_operators.html - avoid_null_checks_in_equality_operators # Good APIs don't use ambiguous boolean parameters. Instead use named parameters # https://dart-lang.github.io/linter/lints/avoid_positional_boolean_parameters.html - avoid_positional_boolean_parameters # Don't call print in production code # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_print.html # - avoid_print # Always prefer function references over typedefs. # Jumping twice in code to see the signature of a lambda sucks. This is different from the flutter analysis_options # https://dart-lang.github.io/linter/lints/avoid_private_typedef_functions.html - avoid_private_typedef_functions # Don't explicitly set defaults # Dart SDK: >= 2.8.0-dev.1.0 • (Linter v0.1.107) # https://dart-lang.github.io/linter/lints/avoid_redundant_argument_values.html - avoid_redundant_argument_values # package or relative? Let's end the discussion and use package everywhere. # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_relative_lib_imports.html - avoid_relative_lib_imports # Not recommended to break dartdoc but besides that there is no reason to continue with bad naming # https://dart-lang.github.io/linter/lints/avoid_renaming_method_parameters.html # - avoid_renaming_method_parameters # Setters always return void, therefore defining void is redundant # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_return_types_on_setters.html - avoid_return_types_on_setters # Especially with Non-Nullable types on the horizon, `int?` is fine. # There are plenty of valid reasons to return null. # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_returning_null.html # - avoid_returning_null # Don't use `Future?`, therefore never return null instead of a Future. # Will become obsolete one Non-Nullable types land # https://dart-lang.github.io/linter/lints/avoid_returning_null_for_future.html - avoid_returning_null_for_future # Use empty returns, don't show off with you knowledge about dart internals. # https://dart-lang.github.io/linter/lints/avoid_returning_null_for_void.html - avoid_returning_null_for_void # Hinting you forgot about the cascade operator. But too often you did this on purpose. # There are plenty of valid reasons to return this. # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_returning_this.html # - avoid_returning_this # Prevents logical inconsistencies. It's good practice to define getters for all existing setters. # https://dart-lang.github.io/linter/lints/avoid_setters_without_getters.html - avoid_setters_without_getters # Don't reuse a type parameter when on with the same name already exists in the same scope # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_shadowing_type_parameters.html - avoid_shadowing_type_parameters # A single cascade operator can be replaced with a normal method call # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_single_cascade_in_expression_statements.html - avoid_single_cascade_in_expression_statements # Might cause frame drops because of synchronous file access on mobile, especially on older phones with slow storage. # There are no known measurements sync access does *not* drop frames. # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_slow_async_io.html # - avoid_slow_async_io # Don't use .toString() in production code which might be minified # Dart SDK: >= 2.10.0-144.0.dev • (Linter v0.1.119) # https://dart-lang.github.io/linter/lints/avoid_type_to_string.html - avoid_type_to_string # Don't use a parameter names which can be confused with a types (i.e. int, bool, num, ...) # pedantic: enabled # https://dart-lang.github.io/linter/lints/avoid_types_as_parameter_names.html - avoid_types_as_parameter_names # Adding the type is not required, but sometimes improves readability. Therefore removing it doesn't always help # https://dart-lang.github.io/linter/lints/avoid_types_on_closure_parameters.html # - avoid_types_on_closure_parameters # Containers without parameters have no effect and can be removed # https://dart-lang.github.io/linter/lints/avoid_unnecessary_containers.html - avoid_unnecessary_containers # Unused parameters should be removed # https://dart-lang.github.io/linter/lints/avoid_unused_constructor_parameters.html - avoid_unused_constructor_parameters # TODO double check # For async functions use `Future` as return value, not `void` # This allows usage of the await keyword and prevents operations from running in parallel. # pedantic: disabled # https://dart-lang.github.io/linter/lints/avoid_void_async.html - avoid_void_async # Flutter mobile only: Web packages aren't available in mobile flutter apps # https://dart-lang.github.io/linter/lints/avoid_web_libraries_in_flutter.html - avoid_web_libraries_in_flutter # Use the await keyword only for futures. There is nothing to await in synchronous code # pedantic: enabled # https://dart-lang.github.io/linter/lints/await_only_futures.html - await_only_futures # Follow the style guide and use UpperCamelCase for extensions # pedantic: enabled # https://dart-lang.github.io/linter/lints/camel_case_extensions.html - camel_case_extensions # Follow the style guide and use UpperCamelCase for class names and typedefs # https://dart-lang.github.io/linter/lints/camel_case_types.html - camel_case_types # Prevents leaks and code executing after their lifecycle. # Discussion https://github.com/passsy/dart-lint/issues/4 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/cancel_subscriptions.html - cancel_subscriptions # The cascade syntax is weird and you shouldn't be forced to use it. # False positives: # https://github.com/dart-lang/linter/issues/1589 # # https://dart-lang.github.io/linter/lints/cascade_invocations.html # - cascade_invocations # Don't cast T? to T. Use ! instead # Dart SDK: >= 2.11.0-182.0.dev • (Linter v0.1.120) # https://dart-lang.github.io/linter/lints/cast_nullable_to_non_nullable.html - cast_nullable_to_non_nullable # False positives, not reliable enough # - https://github.com/dart-lang/linter/issues/1381 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/close_sinks.html # - close_sinks # False positives: # - https://github.com/dart-lang/linter/issues/1142 # # https://dart-lang.github.io/linter/lints/comment_references.html # - comment_references # Follow standard dart naming style. # pedantic: disabled # https://dart-lang.github.io/linter/lints/constant_identifier_names.html - constant_identifier_names # Prevents hard to debug code # pedantic: disabled # https://dart-lang.github.io/linter/lints/control_flow_in_finally.html - control_flow_in_finally # Single line `if`s are fine, but when a new line splits the bool expression and body curly braces # are recommended. It prevents the danging else problem and easily allows the addition of more lines inside # the if body # pedantic: enabled # https://dart-lang.github.io/linter/lints/curly_braces_in_flow_control_structures.html - curly_braces_in_flow_control_structures # Still experimental and pretty much work when enforced # https://dart-lang.github.io/linter/lints/diagnostic_describe_all_properties.html # - diagnostic_describe_all_properties # Follows dart style. Fully supported by IDEs and no manual effort for a consistent style # pedantic: disabled # https://dart-lang.github.io/linter/lints/directives_ordering.html - directives_ordering # String.fromEnvironment looks up env variables at compile time. The variable is baked in by the compiler # and can't be changed by environment variables. # # For dart apps: # Better look up a environment variable at runtime with Platform.environment # or use code generation to define variables at compile time. # # For Flutter apps: # String.fromEnvironment is the recommended way to include variables defined with `flutter build --dart-define` # # pedantic: disabled # Dart SDK: >= 2.10.0-0.0.dev • (Linter v0.1.117) # https://dart-lang.github.io/linter/lints/do_not_use_environment.html # - do_not_use_environment # Add a comment why no further error handling is required # pedantic: enabled # https://dart-lang.github.io/linter/lints/empty_catches.html - empty_catches # Removed empty constructor bodies # pedantic: enabled # https://dart-lang.github.io/linter/lints/empty_constructor_bodies.html - empty_constructor_bodies # Don't allow empty if bodies. Works together with curly_braces_in_flow_control_structures # pedantic: disabled # https://dart-lang.github.io/linter/lints/empty_statements.html - empty_statements # Enums aren't powerful enough, now enum like classes get the same linting support # pedantic: disabled # Dart SDK: >= 2.9.0-12.0.dev • (Linter v0.1.116) # https://dart-lang.github.io/linter/lints/exhaustive_cases.html - exhaustive_cases # Follow dart file naming schema # https://dart-lang.github.io/linter/lints/file_names.html # - file_names # Very flutter specific, not applicable for all projects # pedantic: disabled # https://dart-lang.github.io/linter/lints/flutter_style_todos.html # - flutter_style_todos # not all todos require a ticket # hashCode and equals need to be consistent. One can't live without another. # https://dart-lang.github.io/linter/lints/hash_and_equals.html - hash_and_equals # DON'T import implementation files from another package. # If you need access to some internal code, create an issue # https://dart-lang.github.io/linter/lints/implementation_imports.html - implementation_imports # Although there are some false positives, this lint generally catches unnecessary checks # - https://github.com/dart-lang/linter/issues/811 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/invariant_booleans.html - invariant_booleans # Type check for Iterable.contains(other) where other is! T # otherwise contains will always report false. Those errors are usually very hard to catch. # https://dart-lang.github.io/linter/lints/iterable_contains_unrelated_type.html - iterable_contains_unrelated_type # Hint to join return and assignment. # pedantic: disabled # https://dart-lang.github.io/linter/lints/join_return_with_assignment.html - join_return_with_assignment # Add leading \n which which makes multiline strings easier to read # Dart SDK: >= 2.8.0-dev.16.0 • (Linter v0.1.113) # https://dart-lang.github.io/linter/lints/leading_newlines_in_multiline_strings.html - leading_newlines_in_multiline_strings # Makes sure a library name is a valid dart identifier. # This comes in handy for test files combining multiple tests where the file name can be used as identifier # # ``` # import src/some_test.dart as some_test; # # main() { # some_test.main(); # } # ``` # pedantic: enabled # https://dart-lang.github.io/linter/lints/library_names.html - library_names # Follow dart style # pedantic: enabled # https://dart-lang.github.io/linter/lints/library_prefixes.html - library_prefixes # Nobody wants to manually wrap lines when changing a few words. This rule is too hard to be a "general" rule # https://dart-lang.github.io/linter/lints/lines_longer_than_80_chars.html # - lines_longer_than_80_chars # Type check for List.remove(item) where item is! T # The list can't contain item. Those errors are not directly obvious especially when refactoring. # https://dart-lang.github.io/linter/lints/list_remove_unrelated_type.html - list_remove_unrelated_type # Good for libraries to prevent unnecessary code paths. # False positives may occur for applications when boolean properties are generated by external programs # producing auto-generated source code # # Known issue: while(true) loops https://github.com/dart-lang/linter/issues/453 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/literal_only_boolean_expressions.html # - literal_only_boolean_expressions # Don't forget the whitespaces at the end # Dart SDK: >= 2.8.0-dev.10.0 • (Linter v0.1.110) # https://dart-lang.github.io/linter/lints/missing_whitespace_between_adjacent_strings.html - missing_whitespace_between_adjacent_strings # Concat Strings obviously with `+` inside a list. # pedantic: disabled # https://dart-lang.github.io/linter/lints/no_adjacent_strings_in_list.html - no_adjacent_strings_in_list # Second case is basically dead code which will never be reached. # pedantic: enabled # https://dart-lang.github.io/linter/lints/no_duplicate_case_values.html - no_duplicate_case_values # Flutter only: `createState` shouldn't pass information into the state # https://dart-lang.github.io/linter/lints/no_logic_in_create_state.html - no_logic_in_create_state # calling `runtimeType` may be a performance problem # Dart SDK: >= 2.8.0-dev.10.0 • (Linter v0.1.110) # https://dart-lang.github.io/linter/lints/no_runtimeType_toString.html - no_runtimeType_toString # Follow dart style naming conventions # https://dart-lang.github.io/linter/lints/non_constant_identifier_names.html - non_constant_identifier_names # Generic T might have a value of String or String?. Both are valid. # This lint triggers when ! is used on T? casting (String?)? to String and not (String?)? to String? # Dart SDK: >= 2.11.0-182.0.dev • (Linter v0.1.120) # https://dart-lang.github.io/linter/lints/null_check_on_nullable_type_parameter.html - null_check_on_nullable_type_parameter # Might become irrelevant when non-nullable types land in dart. Until then use this lint check which checks for # non null arguments for specific dart sdk methods. # pedantic: enabled # https://dart-lang.github.io/linter/lints/null_closures.html - null_closures # Types for local variables may improve readability. # pedantic: enabled # https://dart-lang.github.io/linter/lints/omit_local_variable_types.html # - omit_local_variable_types # Defining interfaces (abstract classes), with only one method, makes sense architecture wise # Discussion: https://github.com/passsy/dart-lint/issues/2 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/one_member_abstracts.html # - one_member_abstracts # Since Errors aren't intended to be caught (see avoid_catching_errors), throwing anything # doesn't cause trouble. # https://dart-lang.github.io/linter/lints/only_throw_errors.html # - only_throw_errors # Highlights unintentionally overridden fields. # https://dart-lang.github.io/linter/lints/overridden_fields.html - overridden_fields # Only relevant for packages, not applications or general dart code # https://dart-lang.github.io/linter/lints/package_api_docs.html # - package_api_docs # Follow dart style package naming convention # https://dart-lang.github.io/linter/lints/package_names.html - package_names # Seems very rare, especially for applications. # https://dart-lang.github.io/linter/lints/package_prefixed_library_names.html - package_prefixed_library_names # Most likely a mistake, if not: bad practice # pedantic: disabled # https://dart-lang.github.io/linter/lints/parameter_assignments.html - parameter_assignments # Is contradictory to `no_adjacent_strings_in_list` # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_adjacent_string_concatenation.html # - prefer_adjacent_string_concatenation # Makes it easier to migrate to const constructors and to have final fields # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_asserts_in_initializer_lists.html - prefer_asserts_in_initializer_lists # Assertions blocks don't require a message because they throw simple to understand errors # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_asserts_with_message.html # - prefer_asserts_with_message # Collection literals are shorter. They exists, use them. # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_collection_literals.html - prefer_collection_literals # Use the ??= operator when possible # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_conditional_assignment.html - prefer_conditional_assignment # Always use const when possible, make runtime faster # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_const_constructors.html - prefer_const_constructors # Add a const constructor when possible # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_const_constructors_in_immutables.html - prefer_const_constructors_in_immutables # final is good, const is better # https://dart-lang.github.io/linter/lints/prefer_const_declarations.html - prefer_const_declarations # Always use const when possible, make runtime faster # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_const_literals_to_create_immutables.html - prefer_const_literals_to_create_immutables # Dart has named constructors. Static methods in other languages (java) are a workaround which don't have # named constructors. # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_constructors_over_static_methods.html - prefer_constructors_over_static_methods # Contains may be faster and is easier to read # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_contains.html - prefer_contains # Use whatever makes you happy. lint doesn't define a style # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_double_quotes.html # - prefer_double_quotes # Prevent confusion with call-side when using named parameters # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_equal_for_default_values.html - prefer_equal_for_default_values # Single line methods + implementation makes it hard to write comments for that line. # Dense code isn't necessarily better code. # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_expression_function_bodies.html # - prefer_expression_function_bodies # Avoid accidental reassignments and allows the compiler to do optimizations. # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_final_fields.html - prefer_final_fields # Helps avoid accidental reassignments and allows the compiler to do optimizations. # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_final_in_for_each.html - prefer_final_in_for_each # Helps avoid accidental reassignments and allows the compiler to do optimizations. # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_final_locals.html - prefer_final_locals # Saves lot of code # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_for_elements_to_map_fromIterable.html - prefer_for_elements_to_map_fromIterable # Dense code isn't necessarily better code # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_foreach.html # - prefer_foreach # As Dart allows local function declarations, it is a good practice to use them in the place of function literals. # https://dart-lang.github.io/linter/lints/prefer_function_declarations_over_variables.html - prefer_function_declarations_over_variables # For consistency # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_generic_function_type_aliases.html - prefer_generic_function_type_aliases # Allows potential usage of const # https://dart-lang.github.io/linter/lints/prefer_if_elements_to_conditional_expressions.html - prefer_if_elements_to_conditional_expressions # Dart has a special operator for this, use it # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_if_null_operators.html - prefer_if_null_operators # Terser code # https://dart-lang.github.io/linter/lints/prefer_initializing_formals.html - prefer_initializing_formals # Easier move towards const, and way easier to read # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_inlined_adds.html - prefer_inlined_adds # There is no argument which makes int literals better than double literals for doubles. # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_int_literals.html # - prefer_int_literals # Interpolate, use less "", '' and + # https://dart-lang.github.io/linter/lints/prefer_interpolation_to_compose_strings.html - prefer_interpolation_to_compose_strings # Iterables do not necessary know their length # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_is_empty.html - prefer_is_empty # Easier to read # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_is_not_empty.html - prefer_is_not_empty # Use the `foo is! Foo` instead of `!(foo is Foo)` # https://dart-lang.github.io/linter/lints/prefer_is_not_operator.html - prefer_is_not_operator # Easier to read # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_iterable_whereType.html - prefer_iterable_whereType # Users of a 3rd party mixins can't change 3rd party code to use the mixin syntax. # This makes the rule useless # https://dart-lang.github.io/linter/lints/prefer_mixin.html # - prefer_mixin # Makes expressions with null checks easier to read. # https://github.com/flutter/flutter/pull/32711#issuecomment-492930932 - prefer_null_aware_operators # Conflicting with `avoid_relative_lib_imports` which is enforced # https://dart-lang.github.io/linter/lints/prefer_relative_imports.html # - prefer_relative_imports # Use whatever makes you happy. noexcuse doesn't define a style # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_single_quotes.html # - prefer_single_quotes # Allows potential usage of const # pedantic: enabled # https://dart-lang.github.io/linter/lints/prefer_spread_collections.html - prefer_spread_collections # Define types # pedantic: disabled # https://dart-lang.github.io/linter/lints/prefer_typing_uninitialized_variables.html - prefer_typing_uninitialized_variables # Null is not a type, use void # https://dart-lang.github.io/linter/lints/prefer_void_to_null.html - prefer_void_to_null # Document the replacement API # https://dart-lang.github.io/linter/lints/provide_deprecation_message.html - provide_deprecation_message # Definitely not a rule for standard dart code. Maybe relevant for packages # https://dart-lang.github.io/linter/lints/public_member_api_docs.html # - public_member_api_docs # Hints accidental recursions # pedantic: enabled # https://dart-lang.github.io/linter/lints/recursive_getters.html - recursive_getters # Flutter only, prefer SizedBox over Container which offers a const constructors # Dart SDK: >= 2.9.0-4.0.dev • (Linter v0.1.115) # https://dart-lang.github.io/linter/lints/sized_box_for_whitespace.html - sized_box_for_whitespace # Follow dart style use triple slashes # pedantic: enabled # https://dart-lang.github.io/linter/lints/slash_for_doc_comments.html - slash_for_doc_comments # Flutter only, always put child last # pedantic: enabled # https://dart-lang.github.io/linter/lints/sort_child_properties_last.html - sort_child_properties_last # Working, results in consistent code. But too opinionated # Discussion: https://github.com/passsy/dart-lint/issues/1 # # pedantic: disabled # https://dart-lang.github.io/linter/lints/sort_constructors_first.html # - sort_constructors_first # Any sorting is better than no sorting # https://dart-lang.github.io/linter/lints/sort_pub_dependencies.html # - sort_pub_dependencies # Default constructor comes first. # pedantic: disabled # https://dart-lang.github.io/linter/lints/sort_unnamed_constructors_first.html - sort_unnamed_constructors_first # First test, then cast # pedantic: disabled # https://dart-lang.github.io/linter/lints/test_types_in_equals.html - test_types_in_equals # Hard to debug and bad style # pedantic: disabled # https://dart-lang.github.io/linter/lints/throw_in_finally.html - throw_in_finally # Help the compiler at compile time with non-null asserts rather than crashing at runtime # Dart SDK: >= 2.11.0-182.0.dev • (Linter v0.1.120) # https://dart-lang.github.io/linter/lints/tighten_type_of_initializing_formals.html - tighten_type_of_initializing_formals # Type annotations make the compiler intelligent, use them # https://dart-lang.github.io/linter/lints/type_annotate_public_apis.html - type_annotate_public_apis # Don't add types for already typed constructor parameters. # pedantic: enabled # https://dart-lang.github.io/linter/lints/type_init_formals.html - type_init_formals # Too many false positives. # Using the pedantic package for the unawaited function doesn't make code better readable # # pedantic: enabled # https://dart-lang.github.io/linter/lints/unawaited_futures.html # - unawaited_futures # Remove async/await clutter when not required # https://dart-lang.github.io/linter/lints/unnecessary_await_in_return.html - unnecessary_await_in_return # Remove unnecessary braces # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_brace_in_string_interps.html - unnecessary_brace_in_string_interps # Yes, const everywhere. But not in an already const scope # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_const.html - unnecessary_const # Disabled because `final` prevents accidental reassignment # https://dart-lang.github.io/linter/lints/unnecessary_final.html # - unnecessary_final # Getter/setters can be added later on in a non API breaking manner # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_getters_setters.html - unnecessary_getters_setters # Flutter setState is a good example where a lambda should always be used. # https://github.com/dart-lang/linter/issues/498 # # Some generic code sometimes requires lambdas, otherwise the generic type isn't forwarded correctly. # # https://dart-lang.github.io/linter/lints/unnecessary_lambdas.html # - unnecessary_lambdas # Remove the optional `new` keyword # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_new.html - unnecessary_new # Don't assign `null` when value is already `null`. # pedantic: disabled # https://dart-lang.github.io/linter/lints/unnecessary_null_aware_assignments.html - unnecessary_null_aware_assignments # Remove ! when already non-nullable # Dart SDK: >= 2.10.0-144.0.dev • (Linter v0.1.119) # https://dart-lang.github.io/linter/lints/unnecessary_null_checks.html - unnecessary_null_checks # Don't assign `null` when value is already `null`. # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_null_in_if_null_operators.html - unnecessary_null_in_if_null_operators # If a variable doesn't change and is initialized, no need to define it as nullable (NNDB) # Dart SDK: >= 2.10.0-10.0.dev • (Linter v0.1.118) # https://dart-lang.github.io/linter/lints/unnecessary_nullable_for_final_variable_declarations.html - unnecessary_nullable_for_final_variable_declarations # Remove overrides which simply call super # https://dart-lang.github.io/linter/lints/unnecessary_overrides.html - unnecessary_overrides # Remove clutter where possible # https://dart-lang.github.io/linter/lints/unnecessary_parenthesis.html - unnecessary_parenthesis # Use raw string only when needed # Dart SDK: >= 2.8.0-dev.11.0 • (Linter v0.1.111) # https://dart-lang.github.io/linter/lints/unnecessary_raw_strings.html - unnecessary_raw_strings # Avoid magic overloads of + operators # https://dart-lang.github.io/linter/lints/unnecessary_statements.html - unnecessary_statements # Remove unnecessary escape characters # Dart SDK: >= 2.8.0-dev.11.0 • (Linter v0.1.111) # https://dart-lang.github.io/linter/lints/unnecessary_string_escapes.html - unnecessary_string_escapes # Completely unnecessary code, simplify to save a few CPU cycles # Dart SDK: >= 2.8.0-dev.10.0 • (Linter v0.1.110) # https://dart-lang.github.io/linter/lints/unnecessary_string_interpolations.html - unnecessary_string_interpolations # The variable is clear, remove clutter # pedantic: enabled # https://dart-lang.github.io/linter/lints/unnecessary_this.html - unnecessary_this # Highlights potential bugs where unrelated types are compared with another. (always *not* equal). # pedantic: enabled # https://dart-lang.github.io/linter/lints/unrelated_type_equality_checks.html - unrelated_type_equality_checks # Web only # pedantic: enabled # https://dart-lang.github.io/linter/lints/unsafe_html.html - unsafe_html # Always use hex syntax Color(0x00000001), never Color(1) # pedantic: enabled # https://dart-lang.github.io/linter/lints/use_full_hex_values_for_flutter_colors.html - use_full_hex_values_for_flutter_colors # Always use generic function type syntax, don't mix styles # pedantic: enabled # https://dart-lang.github.io/linter/lints/use_function_type_syntax_for_parameters.html - use_function_type_syntax_for_parameters # Adding a key without using it isn't helpful in applications, only for the Flutter SDK # Dart SDK: >= 2.8.0-dev.1.0 • (Linter v0.1.108) # https://dart-lang.github.io/linter/lints/use_key_in_widget_constructors.html # - use_key_in_widget_constructors # Some might argue late is a code smell, this lint is very opinionated. It triggers only for private fields and # therefore might actually cleanup some code. # There is no performance impact either way https://github.com/dart-lang/linter/pull/2189#discussion_r457945301 # Dart SDK: >= 2.10.0-10.0.dev • (Linter v0.1.118) # https://dart-lang.github.io/linter/lints/use_late_for_private_fields_and_variables.html - use_late_for_private_fields_and_variables # Use rethrow to preserve the original stacktrace. # https://dart.dev/guides/language/effective-dart/usage#do-use-rethrow-to-rethrow-a-caught-exception # pedantic: enabled # https://dart-lang.github.io/linter/lints/use_rethrow_when_possible.html - use_rethrow_when_possible # Use the setter syntax # pedantic: disabled # https://dart-lang.github.io/linter/lints/use_setters_to_change_properties.html - use_setters_to_change_properties # In most cases, using a string buffer is preferred for composing strings due to its improved performance. # https://dart-lang.github.io/linter/lints/use_string_buffers.html - use_string_buffers # Naming is hard, strict rules don't help # pedantic: disabled # https://dart-lang.github.io/linter/lints/use_to_and_as_if_applicable.html # - use_to_and_as_if_applicable # Catches invalid regular expressions. # pedantic: enabled # https://dart-lang.github.io/linter/lints/valid_regexps.html - valid_regexps # Don't assign anything to void # https://dart-lang.github.io/linter/lints/void_checks.html - void_checks