Skip to content

Validate rules for NNBD and other recent language changes #58100

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
bwilkerson opened this issue Jan 4, 2020 · 5 comments
Closed

Validate rules for NNBD and other recent language changes #58100

bwilkerson opened this issue Jan 4, 2020 · 5 comments
Labels
area-meta Cross-cutting, high-level issues (for tracking many other implementation issues, ...). devexp-linter Issues with the analyzer's support for the linter package legacy-area-analyzer Use area-devexp instead. type-task A well-defined stand-alone task

Comments

@bwilkerson
Copy link
Member

bwilkerson commented Jan 4, 2020

This is a tracking issue. The following is a list of the current lint rules. They should be checked off when they have been validated.

  • always_declare_return_types
  • always_put_control_body_on_new_line
  • always_put_required_named_parameters_first
  • always_require_non_null_named_parameters
    • This will be obsolete under NNBD
  • always_specify_types
  • annotate_overrides
  • avoid_annotating_with_dynamic
  • avoid_as
    • This will be obsolete under NNBD
  • avoid_bool_literals_in_conditional_expressions
  • avoid_catches_without_on_clauses
  • avoid_catching_errors
  • avoid_classes_with_only_static_members
  • avoid_double_and_int_checks
  • avoid_empty_else
  • avoid_equals_and_hash_code_on_mutable_classes
  • avoid_field_initializers_in_const_classes
  • avoid_function_literals_in_foreach_calls
  • avoid_implementing_value_types
  • avoid_init_to_null
  • avoid_js_rounded_ints
  • avoid_null_checks_in_equality_operators
    • This will be obsolete under NNBD
    • Might want a lint to prevent using Object? for the parameter
  • avoid_positional_boolean_parameters
  • avoid_print
  • avoid_private_typedef_functions
  • avoid_redundant_argument_values
  • avoid_relative_lib_imports
  • avoid_renaming_method_parameters
  • avoid_return_types_on_setters
  • avoid_returning_null
    • This will be obsolete under NNBD
  • avoid_returning_null_for_future
    • This will be obsolete under NNBD
  • avoid_returning_null_for_void
  • avoid_returning_this
  • avoid_setters_without_getters
  • avoid_shadowing_type_parameters
  • avoid_single_cascade_in_expression_statements
  • avoid_slow_async_io
  • avoid_types_as_parameter_names
  • avoid_types_on_closure_parameters
  • avoid_unnecessary_containers
  • avoid_unused_constructor_parameters
  • avoid_void_async
  • avoid_web_libraries_in_flutter
  • await_only_futures
  • camel_case_extensions
  • camel_case_types
  • cancel_subscriptions
  • cascade_invocations
  • close_sinks
  • comment_references
  • constant_identifier_names
  • control_flow_in_finally
  • curly_braces_in_flow_control_structures
  • diagnostic_describe_all_properties
  • directives_ordering
  • empty_catches
  • empty_constructor_bodies
  • empty_statements
  • file_names
  • flutter_style_todos
  • hash_and_equals
  • implementation_imports
  • invariant_booleans
  • iterable_contains_unrelated_type
  • join_return_with_assignment
  • library_names
  • library_prefixes
  • lines_longer_than_80_chars
  • list_remove_unrelated_type
  • literal_only_boolean_expressions
  • no_adjacent_strings_in_list
  • no_duplicate_case_values
  • no_logic_in_create_state
  • non_constant_identifier_names
  • null_closures
    • This will be obsolete under NNBD
  • omit_local_variable_types
  • one_member_abstracts
  • only_throw_errors
  • overridden_fields
  • package_api_docs
  • package_prefixed_library_names
  • parameter_assignments
  • prefer_adjacent_string_concatenation
  • prefer_asserts_in_initializer_lists
  • prefer_asserts_with_message
  • prefer_bool_in_asserts
    • Deprecated as of 2.0.
  • prefer_collection_literals
  • prefer_conditional_assignment
  • prefer_const_constructors
  • prefer_const_constructors_in_immutables
  • prefer_const_declarations
  • prefer_const_literals_to_create_immutables
  • prefer_constructors_over_static_methods
  • prefer_contains
  • prefer_double_quotes
  • prefer_equal_for_default_values
  • prefer_expression_function_bodies
  • prefer_final_fields
  • prefer_final_in_for_each
  • prefer_final_locals
  • prefer_for_elements_to_map_fromIterable
  • prefer_foreach
  • prefer_function_declarations_over_variables
  • prefer_generic_function_type_aliases
  • prefer_if_elements_to_conditional_expressions
  • prefer_if_null_operators
  • prefer_initializing_formals
  • prefer_inlined_adds
  • prefer_int_literals
  • prefer_interpolation_to_compose_strings
  • prefer_is_empty
  • prefer_is_not_empty
  • prefer_is_not_operator
  • prefer_iterable_whereType
  • prefer_mixin
  • prefer_null_aware_operators
  • prefer_relative_imports
  • prefer_single_quotes
  • prefer_spread_collections
  • prefer_typing_uninitialized_variables
  • prefer_void_to_null
  • provide_deprecation_message
  • pub/package_names
  • pub/sort_pub_dependencies
  • public_member_api_docs
  • recursive_getters
  • slash_for_doc_comments
  • sort_child_properties_last
  • sort_constructors_first
  • sort_unnamed_constructors_first
  • super_goes_last
  • test_types_in_equals
  • throw_in_finally
  • type_annotate_public_apis
  • type_init_formals
  • unawaited_futures
  • unnecessary_await_in_return
  • unnecessary_brace_in_string_interps
  • unnecessary_const
  • unnecessary_final
  • unnecessary_getters
  • unnecessary_getters_setters
  • unnecessary_lambdas
  • unnecessary_new
  • unnecessary_null_aware_assignments
  • unnecessary_null_in_if_null_operators
  • unnecessary_overrides
  • unnecessary_parenthesis
  • unnecessary_statements
  • unnecessary_this
  • unrelated_type_equality_checks
  • unsafe_html
  • use_full_hex_values_for_flutter_colors
  • use_function_type_syntax_for_parameters
  • use_rethrow_when_possible
  • use_setters_to_change_properties
  • use_string_buffers
  • use_to_and_as_if_applicable
  • valid_regexps
  • void_checks
@devoncarew devoncarew added the area-meta Cross-cutting, high-level issues (for tracking many other implementation issues, ...). label Jan 6, 2020
@bwilkerson
Copy link
Member Author

@pq We should decide how we want to handle the rules that will be obsolete under NNBD. We could

  • do nothing,
  • add a warning to the analysis options file (though the rules might still be useful if there are opted-out libraries in the package), or
  • mark them as deprecated (though that impacts code that has not yet migrated).

@davidmorgan Some of the obsolete rules are in the pedantic rule set, so this decision will impact you as well.

@davidmorgan
Copy link
Contributor

Thanks.

It looks like https://dart-lang.github.io/linter/lints/super_goes_last.html might be prior art :)

@bwilkerson
Copy link
Member Author

Yes. At one point the super initialize was allowed to appear anywhere in the initializer list, so we added a lint to enforce best practice. But now it's mandated by the spec, so the lint is deprecated.

@pq
Copy link
Member

pq commented Feb 6, 2020

I guess another option is to:

  • add an optional SDK (version or feature) constraint to lints and only have them fire when conditions are met

(This could be combined w/ options 2 and 3 above.)

@bwilkerson
Copy link
Member Author

We might very well want to do that in order to better support libraries that have opted to use an earlier version of the SDK.

@srawlins srawlins added the type-task A well-defined stand-alone task label Jun 18, 2021
@devoncarew devoncarew added devexp-linter Issues with the analyzer's support for the linter package legacy-area-analyzer Use area-devexp instead. labels Nov 18, 2024
@devoncarew devoncarew transferred this issue from dart-archive/linter Nov 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-meta Cross-cutting, high-level issues (for tracking many other implementation issues, ...). devexp-linter Issues with the analyzer's support for the linter package legacy-area-analyzer Use area-devexp instead. type-task A well-defined stand-alone task
Projects
None yet
Development

No branches or pull requests

5 participants