Merge branch 'master' into 0.1.108
diff --git a/lib/src/rules/avoid_redundant_argument_values.dart b/lib/src/rules/avoid_redundant_argument_values.dart
index 0da8062..265becf 100644
--- a/lib/src/rules/avoid_redundant_argument_values.dart
+++ b/lib/src/rules/avoid_redundant_argument_values.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';
@@ -62,15 +61,19 @@
_Visitor(this.rule, this.context);
- void check(ArgumentList argumentList, List<ParameterElement> parameters) {
- if (argumentList.arguments.isEmpty || parameters == null) {
+ void check(ArgumentList argumentList) {
+ final arguments = argumentList.arguments;
+ if (arguments.isEmpty) {
return;
}
- for (var arg in argumentList.arguments) {
+ for (var i = arguments.length - 1; i >= 0; --i) {
+ var arg = arguments[i];
final param = arg.staticParameterElement;
- if (param == null || param.hasRequired) {
+ if (param == null || param.hasRequired || param.isRequiredNamed) {
continue;
+ } else if (param.isRequiredPositional) {
+ break;
}
final value = param.constantValue;
if (value != null) {
@@ -82,25 +85,19 @@
rule.reportLint(arg);
}
}
+ if (param.isOptionalPositional) {
+ break;
+ }
}
}
@override
void visitInstanceCreationExpression(InstanceCreationExpression node) {
- check(node.argumentList, node.staticElement?.parameters);
+ check(node.argumentList);
}
@override
void visitMethodInvocation(MethodInvocation node) {
- final element = node.staticInvokeType.element;
- List<ParameterElement> parameters;
- if (element is MethodElement) {
- parameters = element.parameters;
- }
- if (element is FunctionElement) {
- parameters = element.parameters;
- }
-
- check(node.argumentList, parameters);
+ check(node.argumentList);
}
}
diff --git a/test/rules/avoid_redundant_argument_values.dart b/test/rules/avoid_redundant_argument_values.dart
index 9c215c7..b07942e 100644
--- a/test/rules/avoid_redundant_argument_values.dart
+++ b/test/rules/avoid_redundant_argument_values.dart
@@ -19,6 +19,10 @@
void g({@required bool valWithDefault = true, bool val}) {}
void gg(int x, [int y = 0]) {}
+void ggg([int a = 1, int b = 2]) {}
+void gggg([int a = 0, int b]) {}
+
+void h([int a, int b = 1]) {}
void main() {
A(valWithDefault: true); //LINT
@@ -56,4 +60,15 @@
gg(1, 0); //LINT
gg(1, 1); //OK
gg(1); //OK
+
+ ggg(
+ 1, // OK the - first argument is required so that we can provide the second argument.
+ 3);
+ ggg(1,
+ 2); // LINT
+
+ gggg(0, 1); //OK
+
+ h(0,
+ 1); //LINT
}