# 3.1.0-wip

- new lint: `no_wildcard_variable_uses`

---

# 1.35.0

- add new lints: 
  - `implicit_reopen`
  - `unnecessary_breaks`
  - `type_literal_in_constant_pattern`
- updates to existing lints to support patterns and class modifiers
- remove support for:
  - `enable_null_safety`
  - `invariant_booleans`
  - `prefer_bool_in_asserts`
  - `prefer_equal_for_default_values`
  - `super_goes_last`
- fix `unnecessary_parenthesis` false-positives with null-aware expressions
- fix `void_checks` to allow assignments of `Future<dynamic>?` to parameters
  typed `FutureOr<void>?`
- fix `use_build_context_synchronously` in if conditions
- fix a false positive for `avoid_private_typedef_functions` with generalized
  type aliases
- update `unnecessary_parenthesis` to detect some doubled parens
- update `void_checks` to allow returning `Never` as void
- update `no_adjacent_strings_in_list` to support set literals and for- and
  if-elements
- update `avoid_types_as_parameter_names` to handle type variables
- update `avoid_positional_boolean_parameters` to handle typedefs
- update `avoid_redundant_argument_values` to check parameters of redirecting
  constructors
- improve performance for `prefer_const_literals_to_create_immutables`
- update `use_build_context_synchronously` to check context properties
- improve `unnecessary_parenthesis` support for property accesses and method
  invocations

# 1.34.0

- update `only_throw_errors` to not report on values of type `Never`
- update `prefer_mixin` to handle class mixins
- update `unnecessary_null_checks` to ignore `Future.value` and 
  `Completer.complete`
- fix `unnecessary_parenthesis` false positives on constant patterns
- new lint: `invalid_case_patterns`
- update `unnecessary_const` to handle case patterns
- improve handling of null-aware cascades in `unnecessary_parenthesis`
- update `unreachable_from_main` to report unreachable public static fields,
  getters, setters, and methods, that are declared on public classes, mixins,
  enums, and extensions

# 1.33.0

- fix `unnecessary_parenthesis` false-positive with null-aware expressions
- fix `void_checks` to allow assignments of `Future<dynamic>?` to parameters 
  typed `FutureOr<void>?`
- removed support for:
  - `enable_null_safety`
  - `invariant_booleans`
  - `prefer_bool_in_asserts`
  - `prefer_equal_for_default_values`
  - `super_goes_last`
- update `unnecessary_parenthesis` to detect some doubled parens
- update `void_checks` to allow returning `Never` as void
- new lint: `unnecessary_breaks`
- fix `use_build_context_synchronously` in if conditions
- update `no_adjacent_strings_in_list` to support set literals and for- and 
  if-elements

# 1.32.0

- update `avoid_types_as_parameter_names` to handle type variables
- update `avoid_positional_boolean_parameters` to handle typedefs
- improve `unnecessary_parenthesis` support for property accesses and method invocations
- update `avoid_redundant_argument_values` to check parameters of redirecting constructors
- performance improvements for `prefer_const_literals_to_create_immutables`
- update `use_build_context_synchronously` to check context properties
- fix false positive for `avoid_private_typedef_functions` with generalized type aliases

# 1.31.0

- update `prefer_equal_for_default_values` to not report for SDKs `>=2.19`,
  where this lint is now an analyzer diagnostic.
- update `unrelated_type_equality_checks` to support updated `package:fixnum`
  structure.

# 1.30.0

- new lint: `enable_null_safety`
- new lint: `library_annotations`
- miscellaneous documentation improvements

# 1.29.0

- new lint: `dangling_library_doc_comments`
- fix `no_leading_underscores_for_local_identifiers` to not report super formals as local variables
- fix `unnecessary_overrides` false negatives
- fix `cancel_subscriptions` for nullable fields 
- new lint: `collection_methods_unrelated_type`
- update `library_names` to support unnamed libraries
- fix `unnecessary_parenthesis` support for as-expressions
- fix `use_build_context_synchronously` to check for context property accesses
- fix false positive in `comment_references`
- improved unrelated type checks to handle enums and cascades
- fix `unnecessary_brace_in_string_interps` for `this` expressions 
- update `use_build_context_synchronously` for `BuildContext.mounted`
- improve `flutter_style_todos` to handle more cases
- fix `use_build_context_synchronously` to check for `BuildContext`s in named expressions
- fix `exhaustive_cases` to check parenthesized expressions
- performance improvements for:
  - `avoid_null_checks_in_equality_operators`
  - `join_return_with_statement`
  - `recursive_getters`
  - `unnecessary_lambdas`
  - `diagnostic_describe_all_properties`
  - `prefer_foreach`
  - `avoid_escaping_inner_quotes`
  - `cascade_invocations`
  - `tighten_type_of_initializing_formals`
  - `prefer_interpolation_to_compose_strings`
  - `prefer_constructors_over_static_methods`
  - `avoid_returning_null`
  - `parameter_assignments`
  - `prefer_constructors_over_static_methods`
  - `prefer_interpolation_to_compose_strings`
  - `avoid_returning_null`
  - `avoid_returning_this`
  - `flutter_style_todos`
  - `avoid_positional_boolean_parameters`
  - `prefer_const_constructors`
- new lint: `implicit_call_tearoffs`
- new lint: `unnecessary_library_directive`

# 1.28.0

- update `avoid_redundant_argument_values` to work with enum declarations
- performance improvements for `prefer_contains`
- new lint: `unreachable_from_main`
- (internal): analyzer API updates and `DartTypeUtilities` refactoring

# 1.27.0

- fix `avoid_redundant_argument_values` when referencing required 
  parameters in legacy libraries
- performance improvements for `use_late_for_private_fields_and_variables`
- new lint: `use_string_in_part_of_directives`
- fixed `use_super_parameters` false positive with repeated super
  parameter references
- updated `use_late_for_private_fields_and_variables` to handle enums
- fixed `prefer_contains` false positive when start index is non-zero
- improved `noop_primitive_operations` to catch `.toString()`
  in string interpolations
- updated `public_member_api_docs` to report diagnostics on extension
  names (instead of bodies)
- miscellaneous documentation improvements
- (internal): `DartTypeUtilities` refactoring

# 1.26.0

- new lint: `combinators_ordering`
- fixed `use_colored_box` and `use_decorated_box` to not over-report
  on containers without a child
- fixed false positive for `unnecessary_parenthesis` on a map-or-set
  literal at the start of an expression statement
- fixed false positive for `prefer_final_locals` reporting on fields
- fixed `unnecessary_overrides` to allow overrides on `@Protected`
  members
- fixed `avoid_multiple_declarations_per_line` false positive in
  `for` statements
- fixed `prefer_final_locals` false positive on declaration lists
  with at least one non-final variable
- fixed `use_build_context_synchronously` to handle `await`s in
  `if` conditions

# 1.25.0

- new lint: `discarded_futures`
- improved message and highlight range for
  `no_duplicate_case_values`
- performance improvements for `lines_longer_than_80_chars`,
  `prefer_const_constructors_in_immutables`, and
  `prefer_initializing_formals`

# 1.24.0

- fix `prefer_final_parameters` to support super parameters
- new lint: `unnecessary_to_list_in_spreads`
- fix `unawaited_futures` to handle string interpolated
  futures
- update `use_colored_box` to not flag nullable colors
- new lint: `unnecessary_null_aware_operator_on_extension_on_nullable`

# 1.23.0

- fixed `no_leading_underscores_for_local_identifiers`
  to lint local function declarations 
- fixed `avoid_init_to_null` to correctly handle super
  initializing defaults that are non-null
- updated `no_leading_underscores_for_local_identifiers`
  to allow identifiers with just underscores
- fixed `flutter_style_todos` to support usernames that
  start with a digit
- updated `require_trailing_commas` to handle functions
  in asserts and multi-line strings
- updated `unsafe_html` to allow assignments to 
  `img.src`
- fixed `unnecessary_null_checks` to properly handle map
  literal entries

# 1.22.0

- fixed false positives for `unnecessary_getters_setters`
  and `prefer_final_fields`with enhanced enums
- updated to analyzer 3.4.0 APIs
- fixed null-safe variance in `invariant_booleans`

# 1.21.2

- several `use_super_parameters` false positive fixes
- updated `depend_on_referenced_packages` to treat
  `flutter_gen` as a virtual package, not needing an
  explicit dependency

# 1.21.1

- bumped language lower-bound constraint to `2.15.0`

# 1.21.0

- fixed `use_key_in_widget_constructors` false positive
  with `key` super parameter initializers
- fixed `use_super_parameters` false positive with field
  formal params
- updated `unnecessary_null_checks` and 
  `null_check_on_nullable_type_parameter` to handle
  list/set/map literals, and `yield` and `await`
  expressions

# 1.20.0

- renamed `use_super_initializers` to `use_super_parameters`
- fixed `unnecessary_null_aware_assignments` property-access
  false positive

# 1.19.2

- new lint: `use_super_initializers`
- new lint: `use_enums`
- new lint: `use_colored_box`
- performance improvements for `sort_constructors`
- doc improvements for `always_use_package_imports`,
  `avoid_print`, and `avoid_relative_lib_imports` 
- update `avoid_void_async` to skip `main` functions
- update `prefer_final_parameters` to not super on super params
- lint updates for enhanced-enums and super-initializer language
  features
- updated `unnecessary_late` to report on the variable name
- marked `null_check_on_nullable_type_parameter` stable

# 1.18.0

- extend `camel_case_types` to cover enums
- fix `no_leading_underscores_for_local_identifiers` to not 
  mis-flag field formal parameters with default values
- fix `prefer_function_declarations_over_variables` to not
  mis-flag non-final fields
- performance improvements for `prefer_contains`
- update `exhaustive_cases` to skip deprecated values that
  redirect to other values

# 1.17.1

- update to `analyzer` version 3.0

# 1.17.0

- new lint: `unnecessary_late`
- fix to `no_leading_underscores_for_local_identifiers` to allow
  underscores in catch clauses

# 1.16.0

- doc improvements for `prefer_initializing_formals`
- updates to `secure_pubspec_urls` to check `issue_tracker` and
  `repository` entries
- new lint: `conditional_uri_does_not_exist`
- performance improvements for 
  `missing_whitespace_between_adjacent_strings`

# 1.15.0

- new lint: `use_decorated_box`
- new lint: `no_leading_underscores_for_library_prefixes`
- new lint: `no_leading_underscores_for_local_identifiers`
- new lint: `secure_pubspec_urls`
- new lint: `sized_box_shrink_expand`
- new lint: `avoid_final_parameters`
- improved docs for `omit_local_variable_types`

# 1.14.0

- fix `omit_local_variable_types` to not flag a local type that is 
  required for inference

# 1.13.0

- allow `while (true) { ...}` in `literal_only_boolean_expressions`
- fixed `file_names` to report at the start of the file (not the entire 
  compilation unit)
- fixed `prefer_collection_literals` named typed param false positive
- control flow improvements for `use_build_context_synchronously`

# 1.12.0

- fixed `unnecessary_lambdas` false positive for const constructor invocations
- updated `avoid_print` to allow `kDebugMode`-wrapped print calls
- fixed handling of initializing formals in `prefer_final_parameters`
- fixed `unnecessary_parenthesis` false positive with function expressions

# 1.11.0

- added support for constructor tear-offs to `avoid_redundant_argument_values`, 
  `unnecessary_lambdas`, and `unnecessary_parenthesis`
- new lint: `unnecessary_constructor_name` to flag unnecessary uses of `.new`

# 1.10.0

- improved regular expression parsing performance for common checks 
  (`camel_case_types`, `file_names`, etc.)
- (internal) migrated to analyzer 2.1.0 APIs
- fixed false positive in `use_build_context_synchronously` in awaits inside 
  anonymous functions
- fixed `overridden_fields` false positive w/ static fields
- fixed false positive in `avoid_null_checks_in_equality_operators` w/ 
  non-nullable params
- fixed false positive for deferred imports in `prefer_const_constructors`

# 1.9.0

- marked `avoid_dynamic_calls` stable
- (internal) removed unused `MockPubVisitor` and `MockRule` classes
- fixed `prefer_void_to_null` false positive w/ overridden properties
- (internal) removed references to `NodeLintRule` in lint rule declarations
- fixed `prefer_void_to_null` false positive on overriding returns
- fixed `prefer_generic_function_type_aliases` false positive w/ incomplete statements
- fixed false positive for `prefer_initializing_formals` with factory constructors
- fixed `void_checks` false positives with incomplete source
- updated `unnecessary_getters_setters` to only flag the getter
- improved messages for `avoid_renaming_method_parameters`
- fixed false positive in `prefer_void_to_null`
- fixed false positive in `omit_local_variable_types`
- fixed false positive in `use_rethrow_when_possible`
- performance improvements for `annotate_overrides`, `prefer_contains`, and `prefer_void_to_null`

# 1.8.0

- performance improvements for `prefer_is_not_empty`
- fixed false positive in `no_logic_in_create_state`
- improve `package_names` to allow dart identifiers as package names
- fixed false-positive in `package_names` (causing keywords to wrongly get flagged)
- fixed `avoid_classes_with_only_static_member` to check for inherited members and also
  flag classes with only methods
- fixed `curly_braces_in_flow_control_structures` to properly flag terminating `else-if`
  blocks
- improved `always_specify_types` to support type aliases
- fixed false positive in `unnecessary_string_interpolations` w/ nullable interpolated 
  strings
- fixed false positive in `avoid_function_literals_in_foreach_calls` for nullable
  iterables
- fixed false positive in `avoid_returning_null` w/ NNBD
- fixed false positive in `use_late_for_private_fields_and_variables` in the presence
  of const constructors
- new lint: `eol_at_end_of_file`
- updated `analyzer` constraint to `>=2.0.0 <3.0.0`

# 1.7.1

- Update `analyzer` constraint to `>=1.7.0 <3.0.0`.
- Update `meta` constraint to `>=1.3.0 <3.0.0`.

# 1.7.0

- fixed case-sensitive false positive in `use_full_hex_values_for_flutter_colors`
- improved try-block and switch statement flow analysis for 
  `use_build_context_synchronously`
- updated `use_setters_to_change_properties` to only highlight a method name,
  not the entire body and doc comment
- updated `unnecessary_getters_setters` to allow otherwise "unnecessary" getters
  and setters with annotations
- updated `missing_whitespace_between_adjacent_strings` to allow String
  interpolations at the beginning and end of String literals
- updated `unnecessary_getters_setters` to allow for setters with non-basic
  assignments (for example, `??=` or `+=`)

# 1.6.1

- reverted relaxation of `sort_child_properties_last` to allow for a 
  trailing Widget in instance creations

# 1.6.0

- relaxed `non_constant_identifier_names` to allow for a trailing
  underscore
- fixed false negative in `prefer_final_parameters` where first parameter
  is final
- improved `directives_ordering` sorting of directives with dot paths and 
  dot-separated package names
- relaxed `sort_child_properties_last` to allow for a trailing Widget in
  instance creations

# 1.5.0

- (internal) migrated to `SecurityLintCode` instead of deprecated 
  `SecurityLintCodeWithUniqueName`
- (internal) fixed `avoid_types_as_parameter_names` to skip field formal
  parameters
- fixed false positives in `prefer_interpolation_to_compose_strings` where
  the left operand is not a String
- fixed false positives in `only_throw_errors` for misidentified type
  variables
- new lint: `depend_on_referenced_packages`
- update `avoid_returning_null_for_future` to skip checks for null-safe
  libraries
- new lint: `use_test_throws_matchers`
- relax `sort_child_properties_last` to accept closures after child
- performance improvements for `prefer_contains` and `prefer_is_empty`
- new lint: `noop_primitive_operations`
- mark `avoid_web_libraries_in_flutter` as stable
- new lint: `prefer_final_parameters`
- update `prefer_initializing_formals` to allow assignments where identifier
  names don't match

# 1.4.0

- `directives_ordering` now checks ordering of `package:` imports in code
  outside pub packages
- simple reachability analysis added to `use_build_context_synchronously` to
  short-circuit await-discovery in terminating blocks
- `use_build_context_synchronously` updated to recognize nullable types when
  accessed from legacy libraries

# 1.3.0

- `non_constant_identifier_names` updated to check local variables, for-loop
  initializers and catch clauses
- error range of `lines_longer_than_80_chars` updated to start at 80 to make
  splitting easier
- new lint: `require_trailing_commas`
- new lint: `prefer_null_aware_method_calls`

# 1.2.1

- fix: adjusted SDK lower bound to 2.12.0-0 (from 2.13.0-0)

# 1.2.0

- improvements to `iterable_contains_unrelated_type` to better support `List`
  content checks
- fixes to `camel_case_types` and `prefer_mixin` to support non-function
  type aliases

# 1.1.0

- fixed `prefer_mixin` to properly make exceptions for `dart.collection` legacy
  mixins
- improved formatting of source examples in docs
- new lint: `use_build_context_synchronously` (experimental)
- new lint: `avoid_multiple_declarations_per_line`

# 1.0.0

- full library migration to null-safety
- new lint: `use_if_null_to_convert_nulls_to_bools`
- new lint: `deprecated_consistency`
- new lint: `use_named_constants`
- deprecation of `avoid_as`

# 0.1.129

- fixed a bug where `avoid_dynamic_calls` produced false-positives for `.call()`

# 0.1.128

- new lint: `avoid_dynamic_calls`
- (internal): updated `avoid_type_to_string` to use `addArgumentList` registry API
- documentation improvements

# 0.1.127

- fixed crash in `prefer_collection_literals` when there is no static parameter
  element

# 0.1.126

- fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
  LinkedHashMap instantiation is passed as the argument to a function in any
  position other than the first
- fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
  LinkedHashMap instantiation is used in a place with a static type other than
  Set or Map

# 0.1.125

- (internal): update to new `PhysicalResourceProvider` API

# 0.1.124

- fixed false positives in `prefer_constructors_over_static_methods`
- updated `package_names` to allow leading underscores

# 0.1.123

- fixed NPEs in `unnecessary_null_checks`

# 0.1.122

- fixed NPE in `unnecessary_null_checks`
- fixed NPE in `missing_whitespace_between_adjacent_strings`
- updated `void_checks` for NNBD
- fixed range error in `unnecessary_string_escapes`
- fixed false positives in `unnecessary_null_types`
- fixed `prefer_constructors_over_static_methods` to respect type parameters
- updated `always_require_non_null_named_parameters` to be NNBD-aware
- updated `unnecessary_nullable_for_final_variable_declarations` to allow dynamic
- update `overridden_fields` to not report on abstract parent fields
- fixes to `unrelated_type_equality_checks` for NNBD
- improvement to `type_init_formals`to allow types not equal to the field type

# 0.1.121

- performance improvements to `always_use_package_imports`, `avoid_renaming_method_parameters`, `prefer_relative_imports` and `public_member_api_docs`
- (internal): update to analyzer `0.40.4` APIs

# 0.1.120

- new lint: `cast_nullable_to_non_nullable`
- new lint: `null_check_on_nullable_type_parameter`
- new lint: `tighten_type_of_initializing_formals`
- update `public_member_apis` to check generic type aliases
- (internal): update to new analyzer APIs

# 0.1.119

- fix `close_sinks` to handle `this`-prefixed property accesses
- new lint: `unnecessary_null_checks`
- fix `unawaited_futures` to handle `Future` subtypes
- new lint: `avoid_type_to_string`

# 0.1.118

- new lint: `unnecessary_nullable_for_final_variable_declarations`
- fixed NPE in `prefer_asserts_in_initializer_lists`
- fixed range error in `unnecessary_string_escapes`
- `unsafe_html` updated to support unique error codes
- updates to `diagnostic_describe_all_properties` to check for `Diagnosticable`s (not `DiagnosticableMixin`s)
- new lint: `use_late`
- fixed `unnecessary_lambdas` to respect deferred imports
- updated `public_member_api_docs` to check mixins
- updated `unnecessary_statements` to skip `as` expressions
- fixed `prefer_relative_imports` to work with path dependencies

# 0.1.117

- fixed `directives_ordering` to remove third party package special-casing
- fixed `unnecessary_lambdas` to check for tearoff assignability
- fixed `exhaustive_cases` to not flag missing cases that are defaulted
- fixed `prefer_is_empty` to special-case assert initializers and const contexts
- test utilities moved to: `lib/src/test_utilities`
- new lint: `do_not_use_environment`

# 0.1.116

- new lint: `no_default_cases` (experimental)
- new lint: `exhaustive_cases`
- updated `type_annotate_public_apis` to allow inferred types in final field assignments
- updated `prefer_mixin` to allow "legacy" SDK abstract class mixins
- new lint: `use_is_even_rather_than_modulo`
- update `unsafe_html` to use a `SecurityLintCode` (making it un-ignorable)
- improved `sized_box_for_whitespace` to address false-positives

# 0.1.115

- updated `avoid_types_as_parameter_names` to check catch-clauses
- fixed `unsafe_html` to check attributes and methods on extensions
- extended `unsafe_html` to include `Window.open`, `Element.html` and `DocumentFragment.html` in unsafe API checks
- improved docs for `sort_child_properties_last`
- (internal) `package:analyzer` API updates
- new lint: `sized_box_for_whitespace`

# 0.1.114

- fixed `avoid_shadowing_type_parameters` to support extensions and mixins
- updated `non_constant_identifier_names` to allow named constructors made up of only underscores (`_`)
- updated `avoid_unused_constructor_parameters` to ignore unused params named in all underscores (`_`)

# 0.1.113

- updated documentation links
- `one_member_abstracts` updated to not lint classes with mixins or implementing interfaces
- `unnecessary_getters_setters` fixed to ignore cases where a getter/setter is deprecated
- new lint: `leading_newlines_in_multiline_strings`
- improved highlight ranges for `avoid_private_typedef_functions` and `avoid_returning_null_for_future`

# 0.1.112

- marked `prefer_typing_uninitialized_variables` and `omit_local_variable_types` as compatible

# 0.1.111+1

- new lint: `use_raw_strings`
- new lint: `unnecessary_raw_strings`
- new lint: `avoid_escaping_inner_quotes`
- new lint: `unnecessary_string_escapes`
- incompatible rule documentation improvements

# 0.1.110

- fixed flutter web plugin detection in `avoid_web_libraries_in_flutter`
- new lint: `unnecessary_string_interpolations`
- new lint: `missing_whitespace_between_adjacent_strings`
- `avoid_unused_constructor_parameters` updated to ignore deprecated parameters
- new lint: `no_runtimeType_toString`
- miscellaneous doc fixes

# 0.1.109

- improved`prefer_single_quotes` lint message
- `unnecessary_finals` fixed to not flag fields
- `unnecessary_lambdas` fixed to work with type arguments
- (internal) migrated to use analyzer `LinterContext.resolveNameInScope()` API

# 0.1.108

- fixes to `avoid_redundant_argument_values`
- new lint: `use_key_in_widget_constructors`
- `always_put_required_parameters` updated for NNBD
- updated to `package:analyzer` 0.39.3 APIs

# 0.1.107

- miscellaneous doc cleanup (typos, etc)
- new lint: `avoid_redundant_argument_values`
- updated `slash_for_doc_comments` to check mixin declarations
- (internal) updates to use new `LinterContext.evaluateConstant` API
- improved docs for `always_require_non_null_named_parameters`

# 0.1.106

- improved docs for `comment_references`
- fixed `null_closures` to properly handle `Iterable.singleWhere`
- (internal) migrated to latest analyzer APIs
- new lint: `no_logic_in_create_state`

# 0.1.105+1

- fixed regressions in `always_require_non_null_named_parameters`
- (internal) pedantic lint clean-up

# 0.1.105

- hardened check for lib dir location (fixing crashes in `avoid_renaming_method_parameters`,
  `prefer_relative_imports` and `public_member_api_docs`)
- improved performance for `always_require_non_null_named_parameters`

# 0.1.104

- updated `unnecessary_overrides` to allow overrides when annotations (besides `@override` are specified)
- updated `file_names` to allow names w/ leading `_`'s (and improved performance)
- new lint: `unnecessary_final`

# 0.1.103

- updated `prefer_relative_imports` to use a faster and more robust way to check for self-package references
- updated our approach to checking for `lib` dir contents (speeding up `avoid_renaming_method_parameters` and
  making `prefer_relative_imports` and `public_member_api_docs` amenable to internal package formats -- w/o pubspecs)

# 0.1.102

- `avoid_web_libraries_in_flutter` updated to disallow access from all but Flutter web plugin packages
- updated `avoid_returning_null_for_void` to check only `null` literals (and not expressions having `Null` types)
- fixed `prefer_final_fields` to respect non-mutating prefix operators
- new lint: `prefer_is_not_operator`
- new lint: `avoid_unnecessary_containers`
- added basic nnbd-awareness to `avoid_init_to_null`

# 0.1.101

- fixed `diagnostic_describe_all_properties` to flag properties in `Diagnosticable`s with no debug methods defined
- fixed `noSuchMethod` exception in `camel_case_extensions` when analyzing unnamed extensions
- fixed `avoid_print` to catch tear-off usage
- new lint: `avoid_web_libraries_in_flutter` (experimental)
- (internal) prepare `unnecessary_lambdas` for coming `MethodInvocation` vs. `FunctionExpressionInvocation` changes

# 0.1.100

- (internal) stop accessing `staticType` in favor of getting type of `FormalParameter`s from the declared element
- (internal) remove stale analyzer work-around for collecting `TypeParameterElement`s in `prefer_const_constructors`

# 0.1.99

- fixed unsafe cast in `overridden_fields`
- (internal) migrated to the mock SDK in `package:analyzer` for testing
- fixed empty argument list access in `use_full_hex_values_for_flutter_color_fix`
- new lint: `prefer_relative_imports`
- improved messages for `await_only_futures`

# 0.1.98

- fixed null raw expression accesses in `use_to_and_as_if_applicable`
- (internal) migrated to using analyzer `InheritanceManager3`

# 0.1.97+1

- enabled `camel_case_extensions` experimental lint

# 0.1.97

- internal: migrated away from using analyzer `resolutionMap`
- various fixes and improvements to anticipate support for extension-methods
- new lint: `camel_case_extensions`
- rule template generation improvements
- new lint: `avoid_equals_and_hash_code_on_mutable_classes`
- extended `avoid_slow_async_io` to flag async `Directory` methods

# 0.1.96

- fixed false positives in `unnecessary_parens`
- various changes to migrate to preferred analyzer APIs
- rule test fixes

# 0.1.95

- improvements to `unsafe_html` error reporting
- fixed false positive in `prefer_asserts_in_initializer_lists`
- fixed `prefer_const_constructors` to not flag `@literal` annotated constructors

# 0.1.94

- (internal): analyzer API call updates
- (internal): implicit cast cleanup

# 0.1.93

- new lint: `avoid_print`

# 0.1.92

- improved `prefer_collection_literals` to better handle `LinkedHashSet`s and `LinkedHashMap`s
- updates to the Effective Dart rule set
- updated `prefer_final_fields` to be more inclusive
- miscellaneous documentation fixes

# 0.1.91

- fixed missed cases in `prefer_const_constructors`
- fixed `prefer_initializing_formals` to no longer suggest API breaking changes
- updated `omit_local_variable_types` to allow explicit `dynamic`s
- (internal) migration from deprecated analyzer APIs

# 0.1.90

- fixed null-reference in `unrelated_type_equality_checks`
- new lint: `unsafe_html`

# 0.1.89

- broadened `prefer_null_aware_operators` to work beyond local variables
- new lint: `prefer_if_null_operators`
- fixed `prefer_contains` false positives
- fixed `unnecessary_parenthesis` false positives

# 0.1.88

- fixed `prefer_asserts_in_initializer_lists` false positives
- fixed `curly_braces_in_flow_control_structures` to handle more cases
- new lint: `prefer_double_quotes`
- new lint: `sort_child_properties_last`
- fixed `type_annotate_public_apis` false positive for `static const` initializers

# 0.1.87

- change: `prefer_const_constructors_in_immutables` is currently overly permissive, pending analyzer changes (#1537)
- fixed `unnecessary_await_in_return` false positive
- fixed `unrelated_type_equality_checks` false negative with functions
- fixed `prefer_spread_collections` to not lint in const contexts
- fixed false positive in `prefer_iterable_whereType` for `is!`
- fixed false positive in `prefer_collection_literals` for constructors with params

# 0.1.86

- updated `prefer_spread_collections` to ignore calls to `addAll` that could be inlined
- new lint: `prefer_inlined_adds`

# 0.1.85

- (**BREAKING**) renamed `spread_collections` to `prefer_spread_collections`
- new lint: `prefer_for_elements_to_map_fromIterable`
- new lint: `prefer_if_elements_to_conditional_expressions`
- new lint: `diagnostic_describe_all_properties`

# 0.1.84

- new lint: `spread_collections`
- (internal) update to analyzer 0.36.0 APIs
- new lint: `prefer_asserts_with_message`

# 0.1.83

- updated `file_names` to skip prefixed-extension Dart files (e.g., `.css.dart`, `.g.dart`)
- updated SDK constraint to `2.2.0`
- miscellaneous rule documentation fixes
- (internal) updated sources to use Set literals
- fixed NPE in `avoid_shadowing_type_parameters`
- added linter version numbering for use in analyzer summaries
- fixed type utilities to handle inheritance cycles
- (internal) changes to adopt new `package:analyzer` APIs
- fixed `unnecessary_parenthesis` false positives

# 0.1.82

- fixed `prefer_collection_literals` Set literal false positives
- fixed `prefer_const_declarations` Set literal false positives
- new lint: `provide_deprecation_message`

# 0.1.81

- updated `prefer_collection_literals` to support Set literals

# 0.1.80

- deprecated `super_goes_last`
- (internal) migrations to analyzer's preferred `InheritanceManager2` API

# 0.1.79

- `unnecessary_parenthesis` updated to play nicer with cascades
- new lint: `use_full_hex_values_for_flutter_colors`
- new lint: `prefer_null_aware_operators`
- miscellaneous documentation fixes
- removed deprecated lints from the "all options" sample
- stopped registering "default lints"
- `hash_and_equals` fixed to respect `hashCode` fields

# 0.1.78

- restored `prefer_final_locals` to ignore loop variables, and
- introduced a new `prefer_final_in_for_each` lint to handle the `for each` case

# 0.1.77

- updated `prefer_final_locals` to check to for loop variables
- fixed `type_annotate_public_apis` false positives on local functions
- fixed `avoid_shadowing_type_parameters` to report shadowed type parameters in generic typedefs
- fixed `use_setters_to_change_properties` to not wrongly lint overriding methods
- fixed `cascade_invocations` to not lint awaited targets
- fixed `prefer_conditional_assignment` false positives
- fixed `join_return_with_assignment` false positives
- fixed `cascade_invocations` false positives
- miscellaneous documentation improvements
- updated `invariant_booleans` status to experimental

# 0.1.76

- `unnecessary_parenthesis` updated to allow wrapping a `!` argument
- miscellaneous documentation grammar and spelling fixes
- improved error messages for `always_declare_return_types`
- fix `prefer_final_fields ` to work with classes that have generic type arguments
- (internal): deprecated code cleanup
- fixed false positives in `unrelated_type_equality_checks`

# 0.1.75

- analyzer package dependency bumped to `^0.34.0`

# 0.1.74

- experimental lints `avoid_positional_boolean_parameters`, `literal_only_boolean_expressions`, `prefer_foreach`, `prefer_void_to_null` promoted to stable
- `unnecessary_parenthesis` improved to handle function expressions

# 0.1.73

- deprecated `prefer_bool_in_asserts` (redundant w/ Dart 2 checks)
- improved doc generation to highlight deprecated and experimental lints
- bumped analyzer lower-bound to `0.33.4`
- bumped SDK lower-bound to `2.1.0`
- new lint: `unnecessary_await_in_return`

# 0.1.72

- new lint: `use_function_type_syntax_for_parameters`
- internal changes to migrate towards analyzer's new `LinterContext` API
- fix false positive in `use_setters_to_change_properties`
- implementation improvements (and speed-ups) to `prefer_foreach` and `public_member_api_docs`
- new lint: `avoid_returning_null_for_future`
- new lint: `avoid_shadowing_type_parameters`

# 0.1.71

- new lint: `prefer_int_literals`
- update `await_only_futures` to allow awaiting on `null`
- update `use_setters_to_change_properties` to work with `=>` short-hand

# 0.1.70

- fix NPE in `prefer_iterable_whereType`

# 0.1.69

- improved message display for `await_only_futures`
- performance improvements for `null_closures`
- new lint: `avoid_returning_null_for_void`

# 0.1.68

- updated analyzer compatibility to `^0.33.0`

# 0.1.67

- miscellaneous mixin support fixes
- update to `sort_constructors_first` to apply to all members
- update `unnecessary_this` to work on field initializers

# 0.1.66

- broadened SDK version constraint

# 0.1.65

- fix cast exceptions related to mixin support

# 0.1.64

- fixes to better support mixins

# 0.1.63

- updated `unawaited_futures` to ignore assignments within cascades
- new lint: `sort_pub_dependencies`

# 0.1.62

- new lint: `prefer_mixin`
- new lint: `avoid_implementing_value_types`

# 0.1.61

- new lint: `flutter_style_todos`
- improved handling of constant expressions with generic type params
- NPE fix for `invariant_booleans`
- Google lints example moved to `package:pedantic`
- improved docs for `unawaited_futures`

# 0.1.60

- new lint: `avoid_void_async`
- `unawaited_futures` updated to check cascades

# 0.1.59

- relaxed `void_checks` (allowing `T Function()` to be assigned to `void Function()`)
- test and build improvements
- introduced Effective Dart rule set
- Google ruleset updates
- (internal cleanup): move cli main into `lib/`
- fixed false positives in `lines_longer_than_80_chars`
- new lint: `prefer_void_to_null`

# 0.1.58

- roll-back to explicit uses of `new` and `const` to be compatible w/ VMs running `--no-preview-dart-2`

# 0.1.57

- fix to `lines_longer_than_80_chars` to handle CRLF endings
- doc improvements
- set max SDK version to <3.0.0
- fix to `non_constant_identifier_names` to better handle invalid code
- new lint: `curly_braces_in_flow_control_structures`

# 0.1.56

- fix to `avoid_positional_boolean_parameters` to ignore overridden methods
- fix to `prefer_is_empty` to not evaluate constants beyond int literals
- new lint: `null_closures`
- new lint: `lines_longer_than_80_chars`

# 0.1.55

- fixed an issue in `const` error handling
- updated `linter` binary to use `previewDart2`

# 0.1.54

- new `unnecessary_const` lint
- new `unnecessary_new` lint
- fixed errors in `use_to_and_as_if_applicable`
- new `file_names` lint

# 0.1.53

- updated `unnecessary_statements` to ignore getters (as they may be side-effecting).

# 0.1.52

- fixed `void_checks` to handle arguments not resolved to a parameter
- fixed exceptions produced by `prefer_const_literals_to_create_immutables`

# 0.1.51

- `unrelated_type_equality_checks` now allows comparison between `Int64` or `Int32` and `int`
- `unnecessary_parenthesis` improved to handle cascades _in_ cascades

# 0.1.50

- migration of rules to use analyzer package `NodeLintRule` and `UnitLintRule` yielding significant performance gains all around
- specific performance improvements for `prefer_final_fields` (~6x)
- addressed no such method calls in `void_checks`
- improved lint reporting for various lints

# 0.1.49

- new `void_checks` lint

# 0.1.48

- new `avoid_field_initializers_in_const_classes` lint
- miscellaneous documentation fixes
- improved handling of cascades in `unnecessary_statements`
- new `avoid_js_rounded_ints` lint

# 0.1.47

- new `avoid_double_and_int_checks` lint
- fix to handle uninitialized vars in `prefer_const_declarations`
- fix for generic function type handling in `avoid_types_as_parameter_names`
- new `prefer_iterable_whereType` lint
- new `prefer_generic_function_type_aliases` lint
- Dart 2 compatibility fixes

# 0.1.46

- performance fixes for library prefix testing (`library_prefixes`)
- new `avoid_bool_literals_in_conditional_expressions` lint
- new `prefer_equal_for_default_values` lint
- new `avoid_private_typedef_functions` lint
- new `avoid_single_cascade_in_expression_statements` lint

# 0.1.45

- fix for `invariant_booleans` when analyzing for loops with no condition
- new `avoid_types_as_parameter_names` lint
- new `avoid_renaming_method_parameters` lint

# 0.1.44

- new `avoid_relative_lib_imports` lint
- new `unnecessary_parenthesis` lint
- fix to `prefer_const_literals_to_create_immutables` to handle undefined classes gracefully
- updates to `prefer_const_declarations` to support optional `new` and `const`
- `prefer_const_declarations` updated to check locals
- fixes to `invariant_booleans`
- bumped SDK lower bound to `2.0.0-dev`
- build and workflow improvements: rule template fixes; formatting and header validation
- miscellaneous documentation fixes

# 0.1.43

- new `prefer_const_declarations.dart` lint
- new `prefer_const_literals_to_create_immutables` lint
- miscellaneous documentation improvements

# 0.1.42

- added support for external constructors in `avoid_unused_constructor_parameters`
- added code reference resolution docs for `comment_references`

# 0.1.41

- broadened `args` package dependency to support versions `1.*`

# 0.1.40

- `avoid_unused_constructor_parameters` updated to better handle redirecting factory constructors
- `avoid_returning_this` improvements
- `prefer_bool_in_asserts` improvements
- miscellaneous documentation fixes

# 0.1.39

- `prefer_interpolation_to_compose_strings` updated to allow concatenation of two non-literal strings
- `prefer_interpolation_to_compose_strings` updated to allow `+=`
- lots of rule documentation fixes and enhancements
- fix for `prefer_const_constructors_in_immutables` false positive with redirecting factory constructors

# 0.1.38

- `public_member_api_docs` fix for package URIs

# 0.1.37

- `avoid_positional_boolean_parameters` updated to allow booleans in operator declarations
- `comment_references` fixed to handle incomplete references
- `non_constant_identifier_names` updated to allow underscores around numbers

# 0.1.36

- new `avoid_unused_constructor_parameters` lint
- new `prefer_bool_in_asserts` lint
- new `prefer_typing_uninitialized_variables` lint
- new `unnecessary_statements` lint
- `public_member_api_docs` updated to only lint source in `lib/`
- 'avoid_empty_else' fixed to ignore synthetic `EmptyStatement`s
- updated library prefix checking to allow leading `$`s
- miscellaneous documentation fixes
- Dart SDK constraints restored (removed unneeded `2.0.0-dev.infinity` constraint)

# 0.1.35

- linter engine updated to use new analysis driver

# 0.1.34

## Features

- `non_constant_identifier_names` extended to include named constructors
- SDK constraint broadened to `2.0.0-dev.infinity`
- improved `prefer_final_fields` performance

## Fixes

- fixes to `unnecessary_overrides` (`noSuchMethod` handling, return type narrowing, special casing of documented `super` calls)
- fix to `non_constant_identifier_names` to handle identifiers with no name
- fixes to `prefer_const_constructors` to support list literals
- fixes to `recursive_getters`
- fixes to `cascade_invocations`

# 0.1.33

## Features

- new `prefer_const_constructors_in_immutables` lint
- new `always_put_required_named_parameters_first` lint
- new `prefer_asserts_in_initializer_lists` lint
- support for running in `--benchmark` mode
- new `prefer_single_quote_strings` lint

## Fixes

- docs for `avoid_setters_without_getters`
- fix to `directives_ordering` to work with part directives located after exports
- fixes to `cascade_invocations` false positives
- fixes to `literal_only_boolean_expressions` false positives
- fix to ensure `cascade_invocations` only lints method invocations if target is a simple identifier
- fixes to `use_string_buffers` false positives
- fixes to `prefer_const_constructors`

# 0.1.32

- Lint stats (`-s`) output now sorted.

# 0.1.31

- New `prefer_foreach` lint.
- New `use_string_buffers` rule.
- New `unnecessary_overrides` rule.
- New `join_return_with_assignment_when_possible` rule.
- New `use_to_and_as_if_applicable` rule.
- New `avoid_setters_without_getters` rule.
- New `always_put_control_body_on_new_line` rule.
- New `avoid_positional_boolean_parameters` rule.
- New `always_require_non_null_named_parameters` rule.
- New `prefer_conditional_assignment` rule.
- New `avoid_types_on_closure_parameters` rule.
- New `always_put_control_body_on_new_line` rule.
- New `use_setters_to_change_properties` rule.
- New `avoid_returning_this` rule.
- New `avoid_annotating_with_dynamic_when_not_required` rule.
- New `prefer_constructors_over_static_methods` rule.
- New `avoid_returning_null` rule.
- New `avoid_classes_with_only_static_members` rule.
- New `avoid_null_checks_in_equality_operators` rule.
- New `avoid_catches_without_on_clauses` rule.
- New `avoid_catching_errors` rule.
- New `use_rethrow_when_possible` rule.
- Many lint fixes (notably `prefer_final_fields`, `unnecessary_lambdas`, `await_only_futures`, `cascade_invocations`, `avoid_types_on_closure_parameters`, and `overridden_fields`).
- Significant performance improvements for `prefer_interpolation_to_compose_strings`.
- New `unnecessary_this` rule.
- New `prefer_initializing_formals` rule.

# 0.1.30

- New `avoid_function_literals_in_foreach_calls` lint.
- New `avoid_slow_async_io` lint.
- New `cascade_invocations` lint.
- New `directives_ordering` lint.
- New `no_adjacent_strings_in_list` lint.
- New `no_duplicate_case_values` lint.
- New `omit_local_variable_types` lint.
- New `prefer_adjacent_string_concatenation` lint.
- New `prefer_collection_literals` lint.
- New `prefer_const_constructors` lint.
- New `prefer_contains` lint.
- New `prefer_expression_function_bodies` lint.
- New `prefer_function_declarations_over_variables` lint.
- New `prefer_initializing_formals` lint.
- New `prefer_interpolation_to_compose_strings` lint.
- New `prefer_is_empty` lint.
- New `recursive_getters` lint.
- New `unnecessary_brace_in_string_interps` lint.
- New `unnecessary_lambdas` lint.
- New `unnecessary_null_aware_assignments` lint.
- New `unnecessary_null_in_if_null_operators` lint.
- Miscellaneous bug fixes and codegen improvements.

# 0.1.29

- New `cascade_invocations` lint.
- Expand `await_only_futures` to accept classes that extend or implement `Future`.
- Improve camel case regular expression tests to accept `$`s.
- Fixes to `parameter_assignments` (improved getter handling and an NPE).

# 0.1.27

- Fixed cast exception in `dart_type_utilities` (dart-lang/sdk#27405).
- New `parameter_assignments` lint.
- New `prefer_final_fields` lint.
- New `prefer_final_locals` lint.
- Markdown link fixes in docs (#306).
- Miscellaneous solo test running fixes and introduction of `solo_debug` (#304).

# 0.1.26

- Updated tests to use package `test` (#302).

# 0.1.25

- Fixed false positive on `[]=` in `always_declare_return_types` (#300).
- New `invariant_booleans` lint.
- New `literal_only_boolean_expressions` lint.
- Fixed `camel_case_types` to allow `$` in identifiers (#290).

# 0.1.24

- Internal updates to keep up with changes in the analyzer package.
- Updated `close_sinks` to respect calls to `destroy` (#282).
- Fixed `only_throw_errors` to report on the expression not node.

# 0.1.23

- Removed `whitespace_around_ops` pending re-name and re-design (#249).

# 0.1.22

- Grinder support (`rule:rule_name` and `docs:location`) for rule stub and doc generation (respectively).
- Fix to allow leading underscores in `non_constant_identifier_names`.
- New `valid_regexps` lint (#277).
- New `whitespace_around_ops` lint (#249).
- Fix to `overridden_fields` to flag overridden static fields (#274).
- New `list_remove_unrelated_type` to detect passing a non-`T` value to `List.remove()`` (#271).
- New `empty_catches` lint to catch empty catch blocks (#43).
- Fixed `close_sinks` false positive (#268).
- `linter` support for `--strong` to allow for running linter in strong mode.

# 0.1.21

- New `only_throw_errors` lint.
- New lint to check for `empty_statements` (#259).
- Fixed NSME when file contents cannot be read (#260).
- Fixed unsafe cast in `iterable_contains_unrelated_type` (#267).

# 0.1.20

- New `cancel_subscriptions` lint.

# 0.1.19

- New `close_sinks` lint.
- Fixes to `iterable_contains_unrelated_type `.

# 0.1.18

- Fix NSME in `iterable_contains_unrelated_type` (#245).
- Fixed typo in `comment_references` error description.
- Fix `overriden_field` false positive (#246).
- Rename linter binary `lints` option to `rules` (#248).
- Help doc tweaks.

# 0.1.17

- Fix to `public_member_api_docs` to check for documented getters when checking setters (#237).
- New `iterable_contains_unrelated_type` lint to detect when `Iterable.contains` is invoked with an object of an unrelated type.
- New `comment_references` lint to ensure identifiers referenced in docs are in scope (#240).

# 0.1.16

- Fix for false positive in `overriden_field`s.
- New `unrelated_type_equality_checks` lint.
- Fix to accept `$` identifiers in string interpolation lint (#214).
- Update to new `plugin` API (`0.2.0`).
- Strong mode cleanup.

# 0.1.15

- Fix to allow simple getter/setters when a decl is ``@protected` (#215).
- Fix to not require type params in `is` checks (#227).
- Fix to not flag field formal identifiers in parameters (#224).
- Fix to respect filters when calculating error codes (#198).
- Fix to allow `const` and `final` vars to be initialized to null (#210).
- Fix to respect commented blocks in `empty_constructor_bodies` (#209).
- Fix to check types on list/map literals (#199).
- Fix to skip `main` when checking for API docs (#207).
- Fix to allow leading `$` in type names (#220).
- Fix to ignore private typedefs when checking for types (#216).
- New `test_types_in_equals` lint.
- New `await_only_futures` lint.
- New `throw_in_finally` lint.
- New `control_flow_in_finally` lint.

# 0.1.14

- Fix to respect `@optionalTypeArgs` (#196).
- Lint to warn if a field overrides or hides other field.
- Fix to allow single char UPPER_CASE non-constants (#201).
- Fix to accept casts to dynamic (#195).

# 0.1.13

- Fix to skip overriding members in API doc checks (`public_member_api_docs`).
- Fix to suppress lints on synthetic nodes/tokens (#193).
- Message fixes (`annotate_overrides`, `public_member_api_docs`).
- Fix to exclude setters from return type checks (#192).

# 0.1.12

- Fix to address `LibraryNames` regexp that in pathological cases went exponential.

# 0.1.11

- Doc generation improvements (now with options samples).
- Lint to sort unnamed constructors first (#187).
- Lint to ensure public members have API docs (#188).
- Lint to ensure constructors are sorted first (#186).
- Lint for `hashCode` and `==` (#168).
- Lint to detect un-annotated overrides (#167).
- Fix to ignore underscores in public APIs (#153).
- Lint to check for return types on setters (#122).
- Lint to flag missing type params (#156).
- Lint to avoid inits to `null` (#160).

# 0.1.10

- Updated to use `analyzer` `0.27.0`.
- Updated options processing to handle untyped maps (dart-lang/sdk#25126).

# 0.1.9

- Fix `type_annotate_public_apis` to properly handle getters/setters (#151; dart-lang/sdk#25092).

# 0.1.8

- Fix to protect against errors in linting invalid source (dart-lang/sdk#24910).
- Added `avoid_empty_else` lint rule (dart-lang/sdk#224936).

# 0.1.7

- Fix to `package_api_docs` (dart-lang/sdk#24947; #154).

# 0.1.6

- Fix to `package_prefixed_library_names` (dart-lang/sdk#24947; #154).

# 0.1.5

- Added `prefer_is_not_empty` lint rule (#143).
- Added `type_annotate_public_apis` lint rule (#24).
- Added `avoid_as` lint rule (#145).
- Fixed `non_constant_identifier_names` rule to special case underscore identifiers in callbacks.
- Fix to escape `_`s in callback type validation (addresses false positives in `always_specify_types`) (#147).

# 0.1.4

- Added `always_declare_return_types` lint rule (#146).
- Improved `always_specify_types` to detect missing types in declared identifiers and narrowed source range to the token.
- Added `implementation_imports` lint rule (#33).
- Test performance improvements.

# 0.1.3+5

- Added `always_specify_types` lint rule (#144).

# 0.1.3+4

- Fixed linter registry memory leaks.

# 0.1.3

- Fixed various options file parsing issues.

# 0.1.2

- Fixed false positives in `unnecessary_brace_in_string_interp` lint. Fix #112.

# 0.1.1

- Internal code and dependency constraint cleanup.

# 0.1.0

- Initial stable release.

# 0.0.2+1

- Added machine output option. Fix #69.
- Fixed resolution of files in `lib/` to use a `package:` URI. Fix #49.
- Tightened up `analyzer` package constraints.
- Fixed false positives in `one_member_abstracts` lint. Fix #64.

# 0.0.2

- Initial push to pub.
