Skip to content

Commit a98ad48

Browse files
pqCommit Queue
authored and
Commit Queue
committed
[wildcards] support for avoid_shadowing_type_parameters
Fixes: https://github.com/dart-lang/linter/issues/5046 Change-Id: I689634f1f3597eeb2145a7a5f01b990d56d2c6ee Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379001 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent 5ff45c5 commit a98ad48

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:analyzer/dart/analysis/features.dart';
56
import 'package:analyzer/dart/ast/ast.dart';
67
import 'package:analyzer/dart/ast/visitor.dart';
8+
import 'package:analyzer/dart/element/element.dart';
79

810
import '../analyzer.dart';
911

@@ -47,17 +49,22 @@ class AvoidShadowingTypeParameters extends LintRule {
4749
@override
4850
void registerNodeProcessors(
4951
NodeLintRegistry registry, LinterContext context) {
50-
var visitor = _Visitor(this);
52+
var visitor = _Visitor(this, context.libraryElement);
5153
registry.addFunctionDeclarationStatement(this, visitor);
5254
registry.addGenericTypeAlias(this, visitor);
5355
registry.addMethodDeclaration(this, visitor);
5456
}
5557
}
5658

5759
class _Visitor extends SimpleAstVisitor<void> {
60+
/// Whether the `wildcard_variables` feature is enabled.
61+
final bool _wildCardVariablesEnabled;
62+
5863
final LintRule rule;
5964

60-
_Visitor(this.rule);
65+
_Visitor(this.rule, LibraryElement? library)
66+
: _wildCardVariablesEnabled =
67+
library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false;
6168

6269
@override
6370
void visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
@@ -126,7 +133,9 @@ class _Visitor extends SimpleAstVisitor<void> {
126133
.toSet();
127134

128135
for (var parameter in typeParameters.typeParameters) {
129-
if (ancestorTypeParameterNames.contains(parameter.name.lexeme)) {
136+
var lexeme = parameter.name.lexeme;
137+
if (_wildCardVariablesEnabled && lexeme == '_') continue;
138+
if (ancestorTypeParameterNames.contains(lexeme)) {
130139
rule.reportLint(parameter,
131140
arguments: [parameter.name.lexeme, ancestorKind]);
132141
}

pkg/linter/test/rules/avoid_shadowing_type_parameters_test.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ extension type E<T>(int i) {
3838
]);
3939
}
4040

41+
test_wildcards() async {
42+
await assertNoDiagnostics(r'''
43+
class A<_> {
44+
void f<_>() {}
45+
}
46+
''');
47+
}
48+
4149
test_wrongNumberOfTypeArguments() async {
4250
await assertDiagnostics(r'''
4351
typedef Predicate = bool <E>(E element);

0 commit comments

Comments
 (0)