|
2 | 2 | // for details. All rights reserved. Use of this source code is governed by a
|
3 | 3 | // BSD-style license that can be found in the LICENSE file.
|
4 | 4 |
|
| 5 | +import 'package:analyzer/dart/analysis/features.dart'; |
5 | 6 | import 'package:analyzer/dart/ast/ast.dart';
|
6 | 7 | import 'package:analyzer/dart/ast/visitor.dart';
|
| 8 | +import 'package:analyzer/dart/element/element.dart'; |
7 | 9 |
|
8 | 10 | import '../analyzer.dart';
|
9 | 11 |
|
@@ -47,17 +49,22 @@ class AvoidShadowingTypeParameters extends LintRule {
|
47 | 49 | @override
|
48 | 50 | void registerNodeProcessors(
|
49 | 51 | NodeLintRegistry registry, LinterContext context) {
|
50 |
| - var visitor = _Visitor(this); |
| 52 | + var visitor = _Visitor(this, context.libraryElement); |
51 | 53 | registry.addFunctionDeclarationStatement(this, visitor);
|
52 | 54 | registry.addGenericTypeAlias(this, visitor);
|
53 | 55 | registry.addMethodDeclaration(this, visitor);
|
54 | 56 | }
|
55 | 57 | }
|
56 | 58 |
|
57 | 59 | class _Visitor extends SimpleAstVisitor<void> {
|
| 60 | + /// Whether the `wildcard_variables` feature is enabled. |
| 61 | + final bool _wildCardVariablesEnabled; |
| 62 | + |
58 | 63 | final LintRule rule;
|
59 | 64 |
|
60 |
| - _Visitor(this.rule); |
| 65 | + _Visitor(this.rule, LibraryElement? library) |
| 66 | + : _wildCardVariablesEnabled = |
| 67 | + library?.featureSet.isEnabled(Feature.wildcard_variables) ?? false; |
61 | 68 |
|
62 | 69 | @override
|
63 | 70 | void visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
|
@@ -126,7 +133,9 @@ class _Visitor extends SimpleAstVisitor<void> {
|
126 | 133 | .toSet();
|
127 | 134 |
|
128 | 135 | 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)) { |
130 | 139 | rule.reportLint(parameter,
|
131 | 140 | arguments: [parameter.name.lexeme, ancestorKind]);
|
132 | 141 | }
|
|
0 commit comments