collection_methods_unrelated_type

Stable
Core

Invocation of various collection methods with arguments of unrelated types.

Details

#

DON'T invoke certain collection method with an argument with an unrelated type.

Doing this will invoke == on the collection's elements and most likely will return false.

An argument passed to a collection method should relate to the collection type as follows:

  • an argument to Iterable<E>.contains should be related to E
  • an argument to List<E>.remove should be related to E
  • an argument to Map<K, V>.containsKey should be related to K
  • an argument to Map<K, V>.containsValue should be related to V
  • an argument to Map<K, V>.remove should be related to K
  • an argument to Map<K, V>.[] should be related to K
  • an argument to Queue<E>.remove should be related to E
  • an argument to Set<E>.lookup should be related to E
  • an argument to Set<E>.remove should be related to E

BAD:

dart
void someFunction() {
  var list = <int>[];
  if (list.contains('1')) print('someFunction'); // LINT
}

BAD:

dart
void someFunction() {
  var set = <int>{};
  set.remove('1'); // LINT
}

GOOD:

dart
void someFunction() {
  var list = <int>[];
  if (list.contains(1)) print('someFunction'); // OK
}

GOOD:

dart
void someFunction() {
  var set = <int>{};
  set.remove(1); // OK
}

Enable

#

To enable the collection_methods_unrelated_type rule, add collection_methods_unrelated_type under linter > rules in your analysis_options.yaml file:

analysis_options.yaml
yaml
linter:
  rules:
    - collection_methods_unrelated_type

If you're instead using the YAML map syntax to configure linter rules, add collection_methods_unrelated_type: true under linter > rules:

analysis_options.yaml
yaml
linter:
  rules:
    collection_methods_unrelated_type: true