[wildcards] allow overridden wildcards in `avoid_renaming_method_parameters`
Allow overriding methods to add variable names where they are declared as wildcards in their base implementation.
Follow-up from https://github.com/dart-lang/linter/issues/5025.
Change-Id: I5c9ad1dc5a946e5062cb51f8069ca3af1bd81a00
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/383708
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
index 5f01aa9..74a87a8 100644
--- a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
@@ -78,6 +78,9 @@
: _wildCardVariablesEnabled =
library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false;
+ bool isWildcardIdentifier(String lexeme) =>
+ _wildCardVariablesEnabled && lexeme == '_';
+
@override
void visitMethodDeclaration(MethodDeclaration node) {
if (node.isStatic) return;
@@ -125,19 +128,18 @@
for (var i = 0; i < count; i++) {
if (parentParameters.length <= i) break;
- var paramIdentifier = parameters[i].name;
- if (paramIdentifier == null) {
- continue;
- }
+ var parentParameterName = parentParameters[i].name;
+ if (isWildcardIdentifier(parentParameterName)) continue;
- var paramLexeme = paramIdentifier.lexeme;
- if (_wildCardVariablesEnabled && paramLexeme == '_') {
- continue; // wildcard identifier
- }
+ var parameterName = parameters[i].name;
+ if (parameterName == null) continue;
- if (paramLexeme != parentParameters[i].name) {
- rule.reportLintForToken(paramIdentifier,
- arguments: [paramIdentifier.lexeme, parentParameters[i].name]);
+ var paramLexeme = parameterName.lexeme;
+ if (isWildcardIdentifier(paramLexeme)) continue;
+
+ if (paramLexeme != parentParameterName) {
+ rule.reportLintForToken(parameterName,
+ arguments: [paramLexeme, parentParameterName]);
}
}
}
diff --git a/pkg/linter/test/rules/avoid_renaming_method_parameters_test.dart b/pkg/linter/test/rules/avoid_renaming_method_parameters_test.dart
index cab28ed..d11ff136 100644
--- a/pkg/linter/test/rules/avoid_renaming_method_parameters_test.dart
+++ b/pkg/linter/test/rules/avoid_renaming_method_parameters_test.dart
@@ -244,6 +244,28 @@
]);
}
+ test_wildcardInBase() async {
+ await assertNoDiagnostics(r'''
+class A {
+ void m(int _, int b, int c) {}
+}
+class B extends A {
+ void m(a, b, c) {}
+}
+''');
+ }
+
+ test_wildcardInBaseAndSub() async {
+ await assertNoDiagnostics(r'''
+class A {
+ void m(int _, int b, int c) {}
+}
+class B extends A {
+ void m(a, b, _) {}
+}
+''');
+ }
+
test_zeroParameters() async {
await assertNoDiagnostics(r'''
class A {