linter icon indicating copy to clipboard operation
linter copied to clipboard

Add warning/lint for `Iterable<E>.whereType<T>` when `T is! E`

Open osaxma opened this issue 2 years ago • 2 comments

Add warning for Iterable<E>.whereType<T> when T is! E.

I think the static analyzer should warn against such obvious cases:

void main() {
  var some = <int>[].whereType<String>();  // no warning here
  print(some.isEmpty); // always true 
}

I expected to have a warning along the lines: Unnecessary Iterable; 'Iterable<int>' can never contain type 'String'...

Why this is useful?

I believe many developers, including myself, relay on the static analyzer when refactoring code by slightly modifying a program so analysis errors/warnings are propagated throughout the codebase to guide the refactoring effort. In such cases, it would be useful to catch the case above, which I came across today.

osaxma avatar Feb 09 '24 17:02 osaxma

Sounds like something that can be included in https://dart.dev/tools/linter-rules/collection_methods_unrelated_type I'll transfer this request to the linter repo.

lrhn avatar Feb 09 '24 23:02 lrhn

CL submitted at: https://dart-review.googlesource.com/c/sdk/+/351781 to include the lint in collection_methods_unrelated_type

osaxma avatar Feb 10 '24 16:02 osaxma