Skip to content

Commit c1a4de8

Browse files
committed
Issues #92, #148: refactor to use common code between two rules
1 parent 69ea981 commit c1a4de8

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
super.visitSimpleIdentifier(node);
14+
_identifiers.add(node);
15+
}
16+
17+
/// Helper method to process expression, even if it is a SimpleIdentifier
18+
void selectFromExpression(Expression expr) {
19+
if (expr case final SimpleIdentifier identifier) {
20+
_identifiers.add(identifier);
21+
return;
22+
}
23+
24+
expr.visitChildren(this);
25+
}
26+
}

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
@@ -3,6 +3,7 @@ import 'package:analyzer/dart/element/element2.dart';
33
import 'package:analyzer/error/listener.dart';
44
import 'package:custom_lint_builder/custom_lint_builder.dart';
55
import 'package:solid_lints/src/lints/avoid_unnecessary_return_variable/visitors/avoid_unnecessary_return_variable_visitor.dart';
6+
import 'package:solid_lints/src/common/visitors/select_expression_identifiers_visitor.dart';
67
import 'package:solid_lints/src/models/rule_config.dart';
78
import 'package:solid_lints/src/models/solid_lint_rule.dart';
89

@@ -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+
visitor.selectFromExpression(expr);
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)