Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit 733fc9c

Browse files
committed
Merge branch 'master' into 0.1.108
2 parents 20478a8 + 015d9ea commit 733fc9c

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

lib/src/rules/avoid_redundant_argument_values.dart

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/ast/visitor.dart';
7-
import 'package:analyzer/dart/element/element.dart';
87

98
import '../analyzer.dart';
109

@@ -62,15 +61,19 @@ class _Visitor extends SimpleAstVisitor {
6261

6362
_Visitor(this.rule, this.context);
6463

65-
void check(ArgumentList argumentList, List<ParameterElement> parameters) {
66-
if (argumentList.arguments.isEmpty || parameters == null) {
64+
void check(ArgumentList argumentList) {
65+
final arguments = argumentList.arguments;
66+
if (arguments.isEmpty) {
6767
return;
6868
}
6969

70-
for (var arg in argumentList.arguments) {
70+
for (var i = arguments.length - 1; i >= 0; --i) {
71+
var arg = arguments[i];
7172
final param = arg.staticParameterElement;
72-
if (param == null || param.hasRequired) {
73+
if (param == null || param.hasRequired || param.isRequiredNamed) {
7374
continue;
75+
} else if (param.isRequiredPositional) {
76+
break;
7477
}
7578
final value = param.constantValue;
7679
if (value != null) {
@@ -82,25 +85,19 @@ class _Visitor extends SimpleAstVisitor {
8285
rule.reportLint(arg);
8386
}
8487
}
88+
if (param.isOptionalPositional) {
89+
break;
90+
}
8591
}
8692
}
8793

8894
@override
8995
void visitInstanceCreationExpression(InstanceCreationExpression node) {
90-
check(node.argumentList, node.staticElement?.parameters);
96+
check(node.argumentList);
9197
}
9298

9399
@override
94100
void visitMethodInvocation(MethodInvocation node) {
95-
final element = node.staticInvokeType.element;
96-
List<ParameterElement> parameters;
97-
if (element is MethodElement) {
98-
parameters = element.parameters;
99-
}
100-
if (element is FunctionElement) {
101-
parameters = element.parameters;
102-
}
103-
104-
check(node.argumentList, parameters);
101+
check(node.argumentList);
105102
}
106103
}

test/rules/avoid_redundant_argument_values.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ void ff({bool valWithDefault = true, bool val}) {}
1919
void g({@required bool valWithDefault = true, bool val}) {}
2020

2121
void gg(int x, [int y = 0]) {}
22+
void ggg([int a = 1, int b = 2]) {}
23+
void gggg([int a = 0, int b]) {}
24+
25+
void h([int a, int b = 1]) {}
2226

2327
void main() {
2428
A(valWithDefault: true); //LINT
@@ -56,4 +60,15 @@ void main() {
5660
gg(1, 0); //LINT
5761
gg(1, 1); //OK
5862
gg(1); //OK
63+
64+
ggg(
65+
1, // OK the - first argument is required so that we can provide the second argument.
66+
3);
67+
ggg(1,
68+
2); // LINT
69+
70+
gggg(0, 1); //OK
71+
72+
h(0,
73+
1); //LINT
5974
}

0 commit comments

Comments
 (0)