Merge pull request #638 from JPaulsen/fiX_linted_node_avoid_types_on_closure_parameters
Fix linted node: avoid_types_on_closure_parameters
diff --git a/lib/src/rules/avoid_types_on_closure_parameters.dart b/lib/src/rules/avoid_types_on_closure_parameters.dart
index 207f786..bcf393b 100644
--- a/lib/src/rules/avoid_types_on_closure_parameters.dart
+++ b/lib/src/rules/avoid_types_on_closure_parameters.dart
@@ -26,20 +26,6 @@
''';
-NormalFormalParameter _getNormalFormalParameter(FormalParameter node) {
- if (node is DefaultFormalParameter) {
- return node.parameter;
- }
- return node;
-}
-
-bool _hasNonDynamicType(NormalFormalParameter parameter) {
- if (parameter is SimpleFormalParameter) {
- return parameter.type != null && parameter.type.name.name != 'dynamic';
- }
- return true;
-}
-
class AvoidTypesOnClosureParameters extends LintRule {
_Visitor _visitor;
AvoidTypesOnClosureParameters()
@@ -55,20 +41,46 @@
AstVisitor getVisitor() => _visitor;
}
-class _Visitor extends SimpleAstVisitor {
- final LintRule rule;
- _Visitor(this.rule);
+class AvoidTypesOnClosureParametersVisitor extends SimpleAstVisitor {
+ LintRule rule;
+
+ AvoidTypesOnClosureParametersVisitor(this.rule);
+
+ @override
+ visitDefaultFormalParameter(DefaultFormalParameter node) {
+ node.parameter.accept(this);
+ }
@override
visitFunctionExpression(FunctionExpression node) {
if (node.parent is FunctionDeclaration) {
return;
}
- final nonDynamicParameters = node.parameters.parameters
- .map(_getNormalFormalParameter)
- .where(_hasNonDynamicType);
- if (nonDynamicParameters.isNotEmpty) {
- rule.reportLint(nonDynamicParameters.first);
+ for (final parameter in node.parameters.parameters) {
+ parameter.accept(this);
}
}
+
+ @override
+ visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
+ rule.reportLint(node);
+ }
+
+ @override
+ visitSimpleFormalParameter(SimpleFormalParameter node) {
+ if (node.type != null && node.type.name.name != 'dynamic') {
+ rule.reportLint(node.type);
+ }
+ }
+}
+
+class _Visitor extends SimpleAstVisitor {
+ final LintRule rule;
+ _Visitor(this.rule);
+
+ @override
+ visitFunctionExpression(FunctionExpression node) {
+ final visitor = new AvoidTypesOnClosureParametersVisitor(rule);
+ visitor.visitFunctionExpression(node);
+ }
}
diff --git a/test/rules/avoid_types_on_closure_parameters.dart b/test/rules/avoid_types_on_closure_parameters.dart
index 665d7b0..48246ed 100644
--- a/test/rules/avoid_types_on_closure_parameters.dart
+++ b/test/rules/avoid_types_on_closure_parameters.dart
@@ -16,7 +16,7 @@
var goodName2 = ({person}) => person.name; // OK
var badName2 = ({Person person}) => person.name; // LINT
-var goodName3 = ({person = ""}) => person; // OK
+var goodName3 = ({person : ""}) => person; // OK
var badName3 = ([String person = ""]) => person; // LINT
var goodName4 = ([person]) => person.name; // OK