[wildcards] `no_wildcard_variable_uses` feature awareness

Fixes: https://github.com/dart-lang/linter/issues/5072

Change-Id: I926ab733df2a8caaa3574fd4284618683780b37e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381920
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
index e1d8ec0..aa3b27d 100644
--- a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
+++ b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/extensions.dart'; //ignore: implementation_imports
 
 import '../analyzer.dart';
 import '../linter_lint_codes.dart';
@@ -62,6 +63,10 @@
   @override
   void registerNodeProcessors(
       NodeLintRegistry registry, LinterContext context) {
+    if (context.libraryElement.hasWildcardVariablesFeatureEnabled) {
+      return;
+    }
+
     var visitor = _Visitor(this);
     registry.addSimpleIdentifier(this, visitor);
   }
diff --git a/pkg/linter/test/rules/no_wildcard_variable_uses_test.dart b/pkg/linter/test/rules/no_wildcard_variable_uses_test.dart
index cfb690f..3f62ee8 100644
--- a/pkg/linter/test/rules/no_wildcard_variable_uses_test.dart
+++ b/pkg/linter/test/rules/no_wildcard_variable_uses_test.dart
@@ -19,6 +19,9 @@
 
   test_constructor() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 class C {
   C._();
   m() {
@@ -31,6 +34,9 @@
 
   test_declaredIdentifier() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 f() {
   for (var _ in [1, 2, 3]) ;
 }
@@ -39,6 +45,9 @@
 
   test_field() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 class C {
   int _ = 0;
   m() {
@@ -50,6 +59,9 @@
 
   test_getter() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 class C {
   int get _ => 0;
   m() {
@@ -72,8 +84,20 @@
     ]);
   }
 
+  test_localVar_wildcardsEnabled() async {
+    // Ensure no lint.
+    await assertNoDiagnostics(r'''
+f() {
+  var _ = 1;
+}
+''');
+  }
+
   test_method() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 class C {
   String _() => '';
   m() {
@@ -86,16 +110,22 @@
 
   test_param() async {
     await assertDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 f(int __) {
   print(__);
 }
 ''', [
-      lint(20, 2),
+      lint(64, 2),
     ]);
   }
 
   test_topLevelFunction() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 String _() => '';
 
 f() {
@@ -107,6 +137,9 @@
 
   test_topLevelGetter() async {
     await assertNoDiagnostics(r'''
+// @dart = 3.4
+// (pre wildcard-variables)
+
 int get _ => 0;
 
 f() {