Skip to content

Commit 23307d2

Browse files
authored
Fix false negative in prefer_contains (dart-archive/linter#2830)
* Fix false negative in `prefer_contains` * restrict for TypeParameterType * use `typeForInterfaceCheck` * Rename to `typeToCheck`
1 parent 9768670 commit 23307d2

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/src/extensions.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,14 @@ extension DartTypeExtension on DartType? {
187187
bool isAnyInterface(InterfaceType i) =>
188188
definitions.any((d) => i.isSameAs(d.name, d.library));
189189

190-
var self = this;
191-
if (self is InterfaceType) {
192-
return isAnyInterface(self) ||
193-
!self.element.isSynthetic &&
194-
self.element.allSupertypes.any(isAnyInterface);
190+
var typeToCheck = this;
191+
if (typeToCheck is TypeParameterType) {
192+
typeToCheck = typeToCheck.typeForInterfaceCheck;
193+
}
194+
if (typeToCheck is InterfaceType) {
195+
return isAnyInterface(typeToCheck) ||
196+
!typeToCheck.element.isSynthetic &&
197+
typeToCheck.element.allSupertypes.any(isAnyInterface);
195198
} else {
196199
return false;
197200
}

test_data/rules/prefer_contains.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,9 @@ testOperators() {
8282
0 > [].indexOf(1); // LINT
8383
0 >= [].indexOf(1); // OK
8484
}
85+
86+
bool f<T extends List<int>>(T list) =>
87+
list.indexOf(1) < 0; // LINT
88+
89+
bool g<T>(T list) =>
90+
list is List<int> && list.indexOf(1) < 0; // LINT

0 commit comments

Comments
 (0)