922 lines
38 KiB
YAML
922 lines
38 KiB
YAML
##
|
|
# 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<void>` 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<T>.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<T>.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
|