mirror of
https://github.com/dart-lang/sdk
synced 2024-10-02 23:49:17 +00:00
quick fix for prefer_const_literals_to_create_immutables
see: https://github.com/dart-lang/sdk/issues/45932 Fixes: https://github.com/dart-lang/sdk/issues/45924 Change-Id: I98d89e9f98b72c333f9bb274b84730d68b71e71f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206102 Commit-Queue: Phil Quitslund <pquitslund@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
99704187c1
commit
3fb1586b28
|
@ -37,6 +37,25 @@ class AddConst extends CorrectionProducer {
|
|||
});
|
||||
return;
|
||||
}
|
||||
|
||||
Future<void> insertAtOffset(AstNode targetNode) async {
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
builder.addSimpleInsertion(targetNode.offset, 'const ');
|
||||
});
|
||||
}
|
||||
|
||||
// todo(pq):consider removing nested `const` declarations
|
||||
// made unnecessary by outer ones in List, Set literal and
|
||||
// instance creations.
|
||||
|
||||
if (targetNode is ListLiteral) {
|
||||
await insertAtOffset(targetNode);
|
||||
return;
|
||||
}
|
||||
if (targetNode is SetOrMapLiteral) {
|
||||
await insertAtOffset(targetNode);
|
||||
return;
|
||||
}
|
||||
if (targetNode is TypeName) {
|
||||
targetNode = targetNode.parent;
|
||||
}
|
||||
|
@ -45,10 +64,8 @@ class AddConst extends CorrectionProducer {
|
|||
}
|
||||
if (targetNode is InstanceCreationExpression) {
|
||||
if (targetNode.keyword == null) {
|
||||
var node_final = targetNode;
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
builder.addSimpleInsertion(node_final.offset, 'const ');
|
||||
});
|
||||
await insertAtOffset(targetNode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,4 +78,7 @@ class AddConst extends CorrectionProducer {
|
|||
// with the `unnecessary_const` lint. Fix it and then enable it for both
|
||||
// uses.
|
||||
static AddConst toInvocation() => AddConst(false, false);
|
||||
|
||||
/// Return an instance of this class. Used as a tear-off in `FixProcessor`.
|
||||
static AddConst toLiteral() => AddConst(true, true);
|
||||
}
|
||||
|
|
|
@ -439,6 +439,9 @@ class FixProcessor extends BaseProcessor {
|
|||
LintNames.prefer_const_declarations: [
|
||||
ReplaceFinalWithConst.newInstance,
|
||||
],
|
||||
LintNames.prefer_const_literals_to_create_immutables: [
|
||||
AddConst.toLiteral,
|
||||
],
|
||||
LintNames.prefer_contains: [
|
||||
ConvertToContains.newInstance,
|
||||
],
|
||||
|
|
|
@ -60,6 +60,8 @@ class LintNames {
|
|||
static const String prefer_const_constructors_in_immutables =
|
||||
'prefer_const_constructors_in_immutables';
|
||||
static const String prefer_const_declarations = 'prefer_const_declarations';
|
||||
static const String prefer_const_literals_to_create_immutables =
|
||||
'prefer_const_literals_to_create_immutables';
|
||||
static const String prefer_contains = 'prefer_contains';
|
||||
static const String prefer_equal_for_default_values =
|
||||
'prefer_equal_for_default_values';
|
||||
|
|
|
@ -11,10 +11,13 @@ import 'fix_processor.dart';
|
|||
|
||||
void main() {
|
||||
defineReflectiveSuite(() {
|
||||
defineReflectiveTests(AddConst_PreferConstConstructorsBulkTest);
|
||||
defineReflectiveTests(AddConst_PreferConstConstructorsInImmutablesBulkTest);
|
||||
defineReflectiveTests(AddConst_PreferConstConstructorsInImmutablesTest);
|
||||
defineReflectiveTests(AddConst_PreferConstConstructorsBulkTest);
|
||||
defineReflectiveTests(AddConst_PreferConstConstructorsTest);
|
||||
defineReflectiveTests(
|
||||
AddConst_PreferConstLiteralsToCreateImmutablesBulkTest);
|
||||
defineReflectiveTests(AddConst_PreferConstLiteralsToCreateImmutablesTest);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -175,3 +178,159 @@ void f() {
|
|||
''');
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class AddConst_PreferConstLiteralsToCreateImmutablesBulkTest
|
||||
extends BulkFixProcessorTest {
|
||||
@override
|
||||
String get lintCode => LintNames.prefer_const_literals_to_create_immutables;
|
||||
|
||||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writeTestPackageConfig(
|
||||
meta: true,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> test_map() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Map children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: {
|
||||
1 : {}
|
||||
});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Map children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: const {
|
||||
1 : const {}
|
||||
});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class AddConst_PreferConstLiteralsToCreateImmutablesTest
|
||||
extends FixProcessorLintTest {
|
||||
@override
|
||||
FixKind get kind => DartFixKind.ADD_CONST;
|
||||
|
||||
@override
|
||||
String get lintCode => LintNames.prefer_const_literals_to_create_immutables;
|
||||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writeTestPackageConfig(
|
||||
meta: true,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> test_list() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final List<C> children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: []);
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final List<C> children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: const []);
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_map() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Map children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: {
|
||||
1 : const {}
|
||||
});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Map children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: const {
|
||||
1 : const {}
|
||||
});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_set() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Set<C> children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: {});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
@immutable
|
||||
class C {
|
||||
final Set<C> children;
|
||||
const C({required this.children});
|
||||
}
|
||||
void f() {
|
||||
var c = C(children: const {});
|
||||
print(c);
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue