Skip to content

Commit 7a96dd6

Browse files
authored
Issues #92, #148: refactor to use common code between two rules (#221)
* Issues #92, #148: refactor to use common code between two rules * Issues #92, #148: fixed code formatting * Issues #92, #148: simplified to use expr.accept(visitor) * Issues #92, #148: removed unnecessary super call
1 parent 69ea981 commit 7a96dd6

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:analyzer/dart/ast/ast.dart';
2+
import 'package:analyzer/dart/ast/visitor.dart';
3+
4+
/// This visitor is used to select all SimpleIdentifiers from Expression
5+
class SelectExpressionIdentifiersVisitor extends RecursiveAstVisitor<void> {
6+
final _identifiers = <SimpleIdentifier>{};
7+
8+
/// List of SimpleIdentifiers mentioned in expression
9+
Set<SimpleIdentifier> get identifiers => _identifiers;
10+
11+
@override
12+
void visitSimpleIdentifier(SimpleIdentifier node) {
13+
_identifiers.add(node);
14+
}
15+
}

lib/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:analyzer/dart/ast/ast.dart';
22
import 'package:analyzer/dart/element/element2.dart';
33
import 'package:analyzer/error/listener.dart';
44
import 'package:custom_lint_builder/custom_lint_builder.dart';
5+
import 'package:solid_lints/src/common/visitors/select_expression_identifiers_visitor.dart';
56
import 'package:solid_lints/src/lints/avoid_unnecessary_return_variable/visitors/avoid_unnecessary_return_variable_visitor.dart';
67
import 'package:solid_lints/src/models/rule_config.dart';
78
import 'package:solid_lints/src/models/solid_lint_rule.dart';
@@ -116,23 +117,10 @@ Rewrite the variable evaluation into return statement instead.""",
116117
}
117118

118119
bool _isExpressionImmutable(Expression expr) {
119-
switch (expr) {
120-
case Literal _:
121-
return true;
122-
123-
case final PrefixedIdentifier prefixed:
124-
return _isExpressionImmutable(prefixed.prefix) &&
125-
_isExpressionImmutable(prefixed.identifier);
126-
127-
case final BinaryExpression binExpr:
128-
return _isExpressionImmutable(binExpr.leftOperand) &&
129-
_isExpressionImmutable(binExpr.rightOperand);
120+
final visitor = SelectExpressionIdentifiersVisitor();
121+
expr.accept(visitor);
130122

131-
case final SimpleIdentifier identifier:
132-
return _isSimpleIdentifierImmutable(identifier);
133-
}
134-
135-
return false;
123+
return visitor.identifiers.every(_isSimpleIdentifierImmutable);
136124
}
137125

138126
bool _isSimpleIdentifierImmutable(SimpleIdentifier identifier) {

0 commit comments

Comments
 (0)