Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit 9f3b463

Browse files
committed
Simplify FutureOr<void> check
1 parent c3d5c0f commit 9f3b463

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

lib/src/rules/void_checks.dart

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ class _Visitor extends SimpleAstVisitor<void> {
7171
return false;
7272
}
7373

74+
bool isTypeAcceptableWhenExpectingFutureOrVoid(DartType type) {
75+
if (type.isDynamic) return true;
76+
if (isTypeAcceptableWhenExpectingVoid(type)) return true;
77+
if (type.isDartAsyncFutureOr &&
78+
type is InterfaceType &&
79+
isTypeAcceptableWhenExpectingFutureOrVoid(type.typeArguments.first)) {
80+
return true;
81+
}
82+
83+
return false;
84+
}
85+
7486
@override
7587
void visitAssignmentExpression(AssignmentExpression node) {
7688
final type = node.writeType;
@@ -133,10 +145,11 @@ class _Visitor extends SimpleAstVisitor<void> {
133145
if (expectedType == null || type == null) {
134146
return;
135147
}
136-
if (expectedType.isVoid && !isTypeAcceptableWhenExpectingVoid(type) ||
137-
expectedType.isDartAsyncFutureOr &&
138-
(expectedType as InterfaceType).typeArguments.first.isVoid &&
139-
!typeSystem.isAssignableTo(type, _futureDynamicType)) {
148+
if (expectedType.isVoid && !isTypeAcceptableWhenExpectingVoid(type)) {
149+
rule.reportLint(node);
150+
} else if (expectedType.isDartAsyncFutureOr &&
151+
(expectedType as InterfaceType).typeArguments.first.isVoid &&
152+
!isTypeAcceptableWhenExpectingFutureOrVoid(type)) {
140153
rule.reportLint(node);
141154
} else if (checkedNode is FunctionExpression &&
142155
checkedNode.body is! ExpressionFunctionBody &&

0 commit comments

Comments
 (0)