Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 16, 2023. It is now read-only.

Commit e5615dc

Browse files
fix: visit only widgets for use-setstate-synchronously
1 parent a2433c4 commit e5615dc

File tree

4 files changed

+42
-4
lines changed

4 files changed

+42
-4
lines changed

‎CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* chore: restrict `analyzer` version to `>=5.1.0 <5.8.0`.
99
* feat: add static code diagnostic [`avoid-substring`](https://dcm.dev/docs/individuals/rules/common/avoid-substring).
1010
* fix: correctly track prefixes usage for check-unused-code.
11+
* fix: visit only widgets for [`use-setstate-synchronously`](https://dcm.dev/docs/individuals/rules/flutter/use-setstate-synchronously).
1112

1213
## 5.6.0
1314

‎lib/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/use_setstate_synchronously_rule.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class UseSetStateSynchronouslyRule extends FlutterRule {
3333
@override
3434
Iterable<Issue> check(InternalResolvedUnitResult source) {
3535
final visitor = _Visitor(methods: methods);
36-
source.unit.visitChildren(visitor);
36+
source.unit.accept(visitor);
3737

3838
return visitor.nodes
3939
.map((node) => createIssue(

‎lib/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/visitor.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@ class _Visitor extends RecursiveAstVisitor<void> {
88
final nodes = <SimpleIdentifier>[];
99

1010
@override
11-
void visitClassDeclaration(ClassDeclaration node) {
12-
if (isWidgetStateOrSubclass(node.extendsClause?.superclass.type)) {
13-
node.visitChildren(this);
11+
void visitCompilationUnit(CompilationUnit node) {
12+
for (final declaration in node.declarations) {
13+
if (declaration is ClassDeclaration) {
14+
final type = declaration.extendsClause?.superclass.type;
15+
if (isWidgetStateOrSubclass(type)) {
16+
declaration.visitChildren(this);
17+
}
18+
}
1419
}
1520
}
1621

‎test/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/examples/example.dart

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,35 @@ class State {}
109109
Future<void> fetch() {}
110110

111111
Future<bool> condition() {}
112+
113+
class SomeClass {
114+
void setState(Function() callback) {}
115+
}
116+
117+
Future<void> handle(Future Function() callback) {}
118+
119+
mixin _SomeMixin on SomeClass {
120+
Future<bool> condition() => handle(() async {
121+
await fetch();
122+
123+
setState();
124+
});
125+
}
126+
127+
abstract class IController {
128+
void setState(void Function() fn);
129+
}
130+
131+
abstract class ControllerBase implements IController {
132+
@override
133+
void setState(void Function() fn) {}
134+
}
135+
136+
class ControllerImpl = ControllerBase with ControllerMixin;
137+
138+
mixin ControllerMixin on ControllerBase {
139+
Future<void> helloWorld() async {
140+
await Future<void>.delayed(const Duration(seconds: 1));
141+
setState(() {});
142+
}
143+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /