Revert "Use LinterContext.resolveNameInScope() for avoid_types_as_parameter_names. (#2062)" (#2063)
This reverts commit 7e67d966467eaa705f77e7ea120fa2c790b7beeb.
diff --git a/lib/src/rules/avoid_types_as_parameter_names.dart b/lib/src/rules/avoid_types_as_parameter_names.dart
index b5ad339..5ab51d0 100644
--- a/lib/src/rules/avoid_types_as_parameter_names.dart
+++ b/lib/src/rules/avoid_types_as_parameter_names.dart
@@ -4,7 +4,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
import '../analyzer.dart';
@@ -37,7 +36,7 @@
@override
void registerNodeProcessors(
NodeLintRegistry registry, LinterContext context) {
- final visitor = _Visitor(this, context);
+ final visitor = _Visitor(this);
registry.addFormalParameterList(this, visitor);
registry.addCatchClause(this, visitor);
}
@@ -45,14 +44,21 @@
class _Visitor extends SimpleAstVisitor<void> {
final LintRule rule;
- final LinterContext context;
- _Visitor(this.rule, this.context);
+ _Visitor(this.rule);
+
+ bool isTypeName(String name) =>
+ // TODO(a14n) test that parameter name matches a existing type. No api to do
+ // that for now.
+ // todo (pq): consider adding a lookup method to LinterContext.
+ name != null &&
+ (name.startsWith(RegExp('[A-Z]')) ||
+ ['num', 'int', 'double', 'bool', 'dynamic'].contains(name));
@override
void visitCatchClause(CatchClause node) {
final parameter = node.exceptionParameter;
- if (parameter != null && _isTypeName(node, parameter)) {
+ if (parameter != null && isTypeName(parameter.name)) {
rule.reportLint(parameter);
}
}
@@ -63,18 +69,9 @@
for (final parameter in node.parameters) {
if (parameter.declaredElement.hasImplicitType &&
- _isTypeName(node, parameter.identifier)) {
+ isTypeName(parameter.identifier.name)) {
rule.reportLint(parameter.identifier);
}
}
}
-
- bool _isTypeName(AstNode scope, SimpleIdentifier node) {
- final result = context.resolveNameInScope(node.name, false, scope);
- if (result.isRequestedName) {
- final element = result.element;
- return element is ClassElement || element is FunctionTypeAliasElement;
- }
- return false;
- }
}
diff --git a/test/rules/avoid_types_as_parameter_names.dart b/test/rules/avoid_types_as_parameter_names.dart
index 75c7f76..9bb3af6 100644
--- a/test/rules/avoid_types_as_parameter_names.dart
+++ b/test/rules/avoid_types_as_parameter_names.dart
@@ -28,7 +28,7 @@
bool, // LINT
]);
typedef f6 = int Function(int); // OK
-typedef void f7(Undefined); // OK
+typedef void f7(Undefined); // LINT
m1(f()) => null; // OK
m2(f(int a)) => null; // OK
@@ -36,9 +36,6 @@
m4(f(num a, {int})) => null; // LINT
m5(f(double a, [bool])) => null; // LINT
m6(int Function(int) f)=> null; // OK
-m7(f(Undefined)) => null; // OK
-m8(f6) => null; // LINT
-m9(f7) => null; // LINT
-m10(m1) => null; // OK
+m7(f(Undefined)) => null; // LINT
final void Function(Object, [StackTrace]) onError = null; // OK