Skip to content

Commit 1d74093

Browse files
authored
assigned variable support for void_checks (dart-archive/linter#4191)
1 parent 9a653fa commit 1d74093

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

lib/src/rules/void_checks.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ class VoidChecks extends LintRule {
4949
void registerNodeProcessors(
5050
NodeLintRegistry registry, LinterContext context) {
5151
var visitor = _Visitor(this, context);
52-
registry.addMethodInvocation(this, visitor);
53-
registry.addInstanceCreationExpression(this, visitor);
52+
registry.addAssignedVariablePattern(this, visitor);
5453
registry.addAssignmentExpression(this, visitor);
54+
registry.addInstanceCreationExpression(this, visitor);
55+
registry.addMethodInvocation(this, visitor);
5556
registry.addReturnStatement(this, visitor);
5657
}
5758
}
@@ -89,6 +90,14 @@ class _Visitor extends SimpleAstVisitor<void> {
8990
return false;
9091
}
9192

93+
@override
94+
void visitAssignedVariablePattern(AssignedVariablePattern node) {
95+
var valueType = node.matchedValueType;
96+
var element = node.element;
97+
if (element is! VariableElement) return;
98+
_check(element.type, valueType, node);
99+
}
100+
92101
@override
93102
void visitAssignmentExpression(AssignmentExpression node) {
94103
var type = node.writeType;

test/rules/void_checks_test.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import '../rule_test_support.dart';
99
main() {
1010
defineReflectiveSuite(() {
1111
defineReflectiveTests(VoidChecksTest);
12+
defineReflectiveTests(VoidChecksTestLanguage300);
1213
});
1314
}
1415

@@ -52,3 +53,42 @@ void bug2813() {
5253
]);
5354
}
5455
}
56+
57+
@reflectiveTest
58+
class VoidChecksTestLanguage300 extends LintRuleTest
59+
with LanguageVersion300Mixin {
60+
@override
61+
String get lintRule => 'void_checks';
62+
63+
test_listPattern_local() async {
64+
await assertDiagnostics(r'''
65+
void f() {
66+
void p;
67+
[p] = <int>[7];
68+
return p;
69+
}
70+
''', [
71+
lint(24, 1),
72+
]);
73+
}
74+
75+
test_listPattern_param() async {
76+
await assertDiagnostics(r'''
77+
void f(void p) {
78+
[p] = <int>[7];
79+
}
80+
''', [
81+
lint(20, 1),
82+
]);
83+
}
84+
85+
test_recordPattern() async {
86+
await assertDiagnostics(r'''
87+
void f(void p) {
88+
(p, ) = (7, );
89+
}
90+
''', [
91+
lint(20, 1),
92+
]);
93+
}
94+
}

0 commit comments

Comments
 (0)