DevX. Issue 54497. DeclaredVariablePattern in ForEachPartsWithPattern to final.

Bug: https://github.com/dart-lang/sdk/issues/54497
Change-Id: Ifa195d29a1a4db47fa12c221e6969ed0d8578a72
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/371162
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2024-06-13 16:57:51 +00:00 committed by Commit Queue
parent 3d3016ecfa
commit 4e8af3bb56
2 changed files with 40 additions and 19 deletions

View file

@ -4,8 +4,8 @@
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
@ -83,16 +83,26 @@ class MakeFinal extends ResolvedCorrectionProducer {
return;
}
if (node is DeclaredVariablePattern) {
var keyword = node.keyword;
if (keyword == null) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleInsertion(node.offset, 'final ');
});
} else if (node.type == null) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.token(keyword), 'final');
});
if (node is DeclaredVariablePatternImpl) {
switch (node.patternContext) {
case ForEachPartsWithPatternImpl patternContext:
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(
range.token(patternContext.keyword),
'final',
);
});
default:
var keyword = node.keyword;
if (keyword == null) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleInsertion(node.offset, 'final ');
});
} else if (node.type == null) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.token(keyword), 'final');
});
}
}
return;
}

View file

@ -287,6 +287,19 @@ class PreferFinalLocalsBulkTest extends BulkFixProcessorTest {
@override
String get lintCode => LintNames.prefer_final_locals;
Future<void> test_recordPattern_forLoop() async {
await resolveTestCode('''
void f() {
for (var (a, b) in [(0, 1)]) {}
}
''');
await assertHasFix('''
void f() {
for (final (a, b) in [(0, 1)]) {}
}
''');
}
Future<void> test_singleFile() async {
await resolveTestCode('''
f() {
@ -404,17 +417,15 @@ List<(int, int)> g((int, int) Function() f) {
Future<void> test_recordPattern_forLoop() async {
await resolveTestCode(r'''
f() {
for (var (a) in [(1)]) {
print('$a');
}
void f() {
// ignore:unused_local_variable
for (var (a,) in [(0,)]) {}
}
''');
await assertHasFix(r'''
f() {
for (final (a) in [(1)]) {
print('$a');
}
void f() {
// ignore:unused_local_variable
for (final (a,) in [(0,)]) {}
}
''');
}