mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 18:36:29 +00:00
Enable ADD_CONST
for bulk
Fixes #47001 Change-Id: Ia42affb8f26e69f94e12192458e68bc29e848ed9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/211446 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
78116e1d2c
commit
20a8d62cca
|
@ -232,7 +232,11 @@ class BulkFixProcessor {
|
|||
var analysisOptions = result.session.analysisContext.analysisOptions;
|
||||
for (var unitResult in result.units) {
|
||||
var overrideSet = _readOverrideSet(unitResult);
|
||||
for (var error in unitResult.errors) {
|
||||
|
||||
var errors = List.from(unitResult.errors, growable: false);
|
||||
errors.sort((a, b) => a.offset.compareTo(b.offset));
|
||||
|
||||
for (var error in errors) {
|
||||
var processor = ErrorProcessor.getProcessor(analysisOptions, error);
|
||||
// Only fix errors not filtered out in analysis options.
|
||||
if (processor == null || processor.severity != null) {
|
||||
|
|
|
@ -8,18 +8,17 @@ import 'package:analyzer/dart/ast/ast.dart';
|
|||
import 'package:analyzer/dart/ast/token.dart';
|
||||
import 'package:analyzer/dart/ast/visitor.dart';
|
||||
import 'package:analyzer/source/source_range.dart';
|
||||
import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.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';
|
||||
|
||||
class AddConst extends CorrectionProducer {
|
||||
@override
|
||||
bool canBeAppliedInBulk;
|
||||
bool get canBeAppliedInBulk => true;
|
||||
|
||||
@override
|
||||
bool canBeAppliedToFile;
|
||||
|
||||
AddConst(this.canBeAppliedInBulk, this.canBeAppliedToFile);
|
||||
bool get canBeAppliedToFile => true;
|
||||
|
||||
@override
|
||||
FixKind get fixKind => DartFixKind.ADD_CONST;
|
||||
|
@ -42,10 +41,29 @@ class AddConst extends CorrectionProducer {
|
|||
return;
|
||||
}
|
||||
|
||||
bool isParentConstant(
|
||||
DartFileEditBuilderImpl builder, Expression targetNode) {
|
||||
var edits = builder.fileEdit.edits;
|
||||
var child = targetNode.parent;
|
||||
while (child is Expression || child is ArgumentList) {
|
||||
if (edits.any((element) =>
|
||||
element.replacement == 'const ' &&
|
||||
element.offset == child!.offset)) {
|
||||
return true;
|
||||
}
|
||||
child = child!.parent;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Future<void> insertAtOffset(Expression targetNode) async {
|
||||
var finder = _ConstRangeFinder();
|
||||
targetNode.accept(finder);
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
if (builder is DartFileEditBuilderImpl &&
|
||||
isParentConstant(builder, targetNode)) {
|
||||
return;
|
||||
}
|
||||
builder.addSimpleInsertion(targetNode.offset, 'const ');
|
||||
for (var range in finder.ranges) {
|
||||
builder.addDeletion(range);
|
||||
|
@ -76,16 +94,7 @@ class AddConst extends CorrectionProducer {
|
|||
}
|
||||
|
||||
/// Return an instance of this class. Used as a tear-off in `FixProcessor`.
|
||||
static AddConst toDeclaration() => AddConst(true, true);
|
||||
|
||||
/// Return an instance of this class. Used as a tear-off in `FixProcessor`.
|
||||
// TODO(brianwilkerson) This fix can produce changes that are inconsistent
|
||||
// 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);
|
||||
static AddConst newInstance() => AddConst();
|
||||
}
|
||||
|
||||
class _ConstRangeFinder extends RecursiveAstVisitor<void> {
|
||||
|
|
|
@ -441,17 +441,17 @@ class FixProcessor extends BaseProcessor {
|
|||
ReplaceWithConditionalAssignment.newInstance,
|
||||
],
|
||||
LintNames.prefer_const_constructors: [
|
||||
AddConst.toInvocation,
|
||||
AddConst.newInstance,
|
||||
ReplaceNewWithConst.newInstance,
|
||||
],
|
||||
LintNames.prefer_const_constructors_in_immutables: [
|
||||
AddConst.toDeclaration,
|
||||
AddConst.newInstance,
|
||||
],
|
||||
LintNames.prefer_const_declarations: [
|
||||
ReplaceFinalWithConst.newInstance,
|
||||
],
|
||||
LintNames.prefer_const_literals_to_create_immutables: [
|
||||
AddConst.toLiteral,
|
||||
AddConst.newInstance,
|
||||
],
|
||||
LintNames.prefer_contains: [
|
||||
ConvertToContains.newInstance,
|
||||
|
|
|
@ -26,8 +26,6 @@ class AddConst_PreferConstConstructorsBulkTest extends BulkFixProcessorTest {
|
|||
@override
|
||||
String get lintCode => LintNames.prefer_const_constructors;
|
||||
|
||||
/// Disabled in BulkFixProcessor.
|
||||
@failingTest
|
||||
Future<void> test_noKeyword() async {
|
||||
writeTestPackageConfig(meta: true);
|
||||
await resolveTestCode(r'''
|
||||
|
@ -36,12 +34,11 @@ class C {
|
|||
}
|
||||
var c = C(C());
|
||||
''');
|
||||
// TODO (pq): results are incompatible w/ `unnecessary_const`
|
||||
await assertHasFix(r'''
|
||||
class C {
|
||||
const C([C c]);
|
||||
}
|
||||
var c = const C(const C());
|
||||
var c = const C(C());
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue