pattern variable declaration support for `remove_leading_underscores`

Fixes: https://github.com/dart-lang/sdk/issues/51867

Change-Id: Id956d97eee418dfeed2ea62aa0779b9f06ac600b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291361
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart
index 9bc435d..4122d98 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart
@@ -39,6 +39,9 @@
     } else if (node is VariableDeclaration) {
       nameToken = node.name;
       element = node.declaredElement;
+    } else if (node is DeclaredVariablePattern) {
+      nameToken = node.name;
+      element = node.declaredElement;
     } else {
       return;
     }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart
index 4a809b0..92ca7f3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart
@@ -74,6 +74,21 @@
   @override
   String get lintCode => LintNames.no_leading_underscores_for_local_identifiers;
 
+  Future<void> test_listPatternAssignment() async {
+    await resolveTestCode(r'''
+f() {
+  var [_a] = [1];
+  print(_a);
+}
+''');
+    await assertHasFix(r'''
+f() {
+  var [a] = [1];
+  print(a);
+}
+''');
+  }
+
   Future<void> test_localVariable() async {
     await resolveTestCode('''
 void f() {
@@ -152,6 +167,29 @@
 ''');
   }
 
+  Future<void> test_objectPatternAssignment() async {
+    await resolveTestCode(r'''
+class A {
+  int a;
+  A(this.a);
+}
+f() {
+  final A(a: int _b) = A(1);
+  print(_b);
+}
+''');
+    await assertHasFix(r'''
+class A {
+  int a;
+  A(this.a);
+}
+f() {
+  final A(a: int b) = A(1);
+  print(b);
+}
+''');
+  }
+
   Future<void> test_parameter_closure() async {
     await resolveTestCode('''
 void f() {
@@ -220,4 +258,19 @@
 }
 ''');
   }
+
+  Future<void> test_recordPatternAssignment() async {
+    await resolveTestCode(r'''
+f() {
+  var (_a, b) = (1, 2);
+  print('$_a$b');
+}
+''');
+    await assertHasFix(r'''
+f() {
+  var (a, b) = (1, 2);
+  print('$a$b');
+}
+''');
+  }
 }