Skip to content
This repository was archived by the owner on Jul 16, 2023. It is now read-only.

Commit 1c507fe

Browse files
authored
fix: support function expression invocations for prefer-moving-to-variable (#1109)
1 parent 8ec23cb commit 1c507fe

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Unreleased
44

5+
* fix: support function expression invocations for [`prefer-moving-to-variable`](https://dartcodemetrics.dev/docs/rules/common/prefer-moving-to-variable).
56
* feat: support ignoring regular comments for [`format-comment`](https://dartcodemetrics.dev/docs/rules/common/format-comment).
67

78
## 5.2.1

lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_moving_to_variable/visitor.dart

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class _BlockVisitor extends RecursiveAstVisitor<void> {
6464
}
6565

6666
bool _checkForDuplicates(AstNode node, Expression? target) {
67-
final access = node.toString();
67+
final access = _extractAccess(node);
6868
final visitedInvocation = _visitedInvocations[access];
6969
final isDuplicate =
7070
visitedInvocation != null && _isDuplicate(visitedInvocation, node);
@@ -86,6 +86,18 @@ class _BlockVisitor extends RecursiveAstVisitor<void> {
8686
return false;
8787
}
8888

89+
String _extractAccess(AstNode node) {
90+
final parent = node.parent;
91+
if (parent is FunctionExpressionInvocation) {
92+
final typeArguments = parent.typeArguments;
93+
if (typeArguments != null && typeArguments.arguments.isNotEmpty) {
94+
return parent.toString();
95+
}
96+
}
97+
98+
return node.toString();
99+
}
100+
89101
bool _isDuplicate(AstNode visitedInvocation, AstNode node) {
90102
final visitedSwitch =
91103
visitedInvocation.thisOrAncestorOfType<SwitchStatement>();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
void main() {
2+
final a = GetIt.instance<Object>();
3+
final b = GetIt.instance<String>();
4+
}
5+
6+
class GetIt {
7+
static final _instance = GetIt();
8+
9+
static GetIt get instance => _instance;
10+
11+
T get<T extends Object>() => 'str' as T;
12+
13+
T call<T extends Object>() => get<T>;
14+
}

test/src/analyzers/lint_analyzer/rules/rules_list/prefer_moving_to_variable/prefer_moving_to_variable_rule_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ const _scopeExamplePath =
1313
'prefer_moving_to_variable/examples/scope_example.dart';
1414
const _cascadeExamplePath =
1515
'prefer_moving_to_variable/examples/cascade_example.dart';
16+
const _genericsExamplePath =
17+
'prefer_moving_to_variable/examples/generics_example.dart';
1618

1719
void main() {
1820
group('PreferMovingToVariableRule', () {
@@ -213,6 +215,13 @@ void main() {
213215
RuleTestHelper.verifyNoIssues(issues);
214216
});
215217

218+
test('reports no issues for generics', () async {
219+
final unit = await RuleTestHelper.resolveFromFile(_genericsExamplePath);
220+
final issues = PreferMovingToVariableRule().check(unit);
221+
222+
RuleTestHelper.verifyNoIssues(issues);
223+
});
224+
216225
test('reports issues with custom config', () async {
217226
final unit = await RuleTestHelper.resolveFromFile(_examplePath);
218227
final config = {

0 commit comments

Comments
 (0)