mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 00:09:20 +00:00
pattern variable declaration support for replace_final_with_var
Fixes: https://github.com/dart-lang/sdk/issues/51864 Change-Id: I6c1c23f7fdce5bea7d9b3b09210b2ded04be3a60 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291342 Reviewed-by: Samuel Rawlins <srawlins@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
parent
e0ab0d1be5
commit
0d000e85d6
|
@ -5,6 +5,7 @@
|
|||
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
|
||||
import 'package:analysis_server/src/services/correction/fix.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/token.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';
|
||||
|
@ -25,13 +26,17 @@ class ReplaceFinalWithVar extends CorrectionProducer {
|
|||
@override
|
||||
Future<void> compute(ChangeBuilder builder) async {
|
||||
final node = this.node;
|
||||
Token? keyword;
|
||||
if (node is VariableDeclarationList) {
|
||||
var keyword = node.keyword;
|
||||
if (keyword != null && node.type == null) {
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
builder.addSimpleReplacement(range.token(keyword), 'var');
|
||||
});
|
||||
}
|
||||
if (node.type == null) keyword = node.keyword;
|
||||
} else if (node is PatternVariableDeclaration) {
|
||||
keyword = node.keyword;
|
||||
}
|
||||
|
||||
if (keyword != null) {
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
builder.addSimpleReplacement(range.token(keyword!), 'var');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,41 @@ class ReplaceFinalWithVarTest extends FixProcessorLintTest {
|
|||
@override
|
||||
String get lintCode => LintNames.unnecessary_final;
|
||||
|
||||
/// https://github.com/dart-lang/sdk/issues/51864
|
||||
Future<void> test_listPattern_assignment() async {
|
||||
await resolveTestCode('''
|
||||
f() {
|
||||
final [a] = [1];
|
||||
print(a);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
f() {
|
||||
var [a] = [1];
|
||||
print(a);
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
/// https://github.com/dart-lang/sdk/issues/51864
|
||||
@FailingTest(reason: 'Not supported')
|
||||
Future<void> test_listPattern_ifCase() async {
|
||||
// Note that the simpler case is also unsupported:
|
||||
// final int x = 0;
|
||||
|
||||
// Switch cases are similarly unsupported.
|
||||
await resolveTestCode('''
|
||||
f(Object o) {
|
||||
if (o case [final int x]) print(x);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
f(Object o) {
|
||||
if (o case [int x]) print(x);
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_method() async {
|
||||
await resolveTestCode('''
|
||||
void f() {
|
||||
|
@ -61,6 +96,22 @@ void f() {
|
|||
var a = 1;
|
||||
print(a);
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
/// https://github.com/dart-lang/sdk/issues/51864
|
||||
Future<void> test_recordPattern_assignment() async {
|
||||
await resolveTestCode(r'''
|
||||
f() {
|
||||
final (a, b) = (1, 2);
|
||||
print('$a$b');
|
||||
}
|
||||
''');
|
||||
await assertHasFix(r'''
|
||||
f() {
|
||||
var (a, b) = (1, 2);
|
||||
print('$a$b');
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue