mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:49:47 +00:00
quick fix for avoid_unnecessary_containers
Fixes: https://github.com/dart-lang/sdk/issues/45922 Change-Id: Icddecacce88f725bfa72a5b4c0a667250ba268bd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206420 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
parent
341facafc7
commit
edb0220277
|
@ -4,15 +4,30 @@
|
|||
|
||||
import 'package:analysis_server/src/services/correction/assist.dart';
|
||||
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_plugin/utilities/assist/assist.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 FlutterRemoveWidget extends CorrectionProducer {
|
||||
@override
|
||||
AssistKind get assistKind => DartAssistKind.FLUTTER_REMOVE_WIDGET;
|
||||
|
||||
/// todo(pq): find out why overlapping edits are not being applied (and enable)
|
||||
@override
|
||||
bool get canBeAppliedInBulk => false;
|
||||
|
||||
@override
|
||||
bool get canBeAppliedToFile => false;
|
||||
|
||||
@override
|
||||
FixKind get fixKind => DartFixKind.REMOVE_UNNECESSARY_CONTAINER;
|
||||
|
||||
@override
|
||||
FixKind? get multiFixKind => DartFixKind.REMOVE_UNNECESSARY_CONTAINER_MULTI;
|
||||
|
||||
@override
|
||||
Future<void> compute(ChangeBuilder builder) async {
|
||||
var widgetCreation = flutter.identifyNewExpression(node);
|
||||
|
|
|
@ -606,6 +606,14 @@ class DartFixKind {
|
|||
'dart.fix.remove.unnecessaryNew.multi',
|
||||
DartFixKindPriority.IN_FILE,
|
||||
'Remove unnecessary new keywords everywhere in file');
|
||||
static const REMOVE_UNNECESSARY_CONTAINER = FixKind(
|
||||
'dart.fix.remove.unnecessaryContainer',
|
||||
DartFixKindPriority.DEFAULT,
|
||||
"Remove unnecessary 'Container'");
|
||||
static const REMOVE_UNNECESSARY_CONTAINER_MULTI = FixKind(
|
||||
'dart.fix.remove.unnecessaryContainer.multi',
|
||||
DartFixKindPriority.IN_FILE,
|
||||
"Remove unnecessary 'Container's in file");
|
||||
static const REMOVE_UNNECESSARY_PARENTHESES = FixKind(
|
||||
'dart.fix.remove.unnecessaryParentheses',
|
||||
DartFixKindPriority.DEFAULT,
|
||||
|
|
|
@ -77,6 +77,7 @@ import 'package:analysis_server/src/services/correction/dart/create_no_such_meth
|
|||
import 'package:analysis_server/src/services/correction/dart/create_setter.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/data_driven.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/extend_class_for_mixin.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/flutter_remove_widget.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/ignore_diagnostic.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/import_library.dart';
|
||||
import 'package:analysis_server/src/services/correction/dart/inline_invocation.dart';
|
||||
|
@ -379,6 +380,9 @@ class FixProcessor extends BaseProcessor {
|
|||
// TODO(brianwilkerson) Consider applying in bulk.
|
||||
RemoveUnusedParameter.newInstance,
|
||||
],
|
||||
LintNames.avoid_unnecessary_containers: [
|
||||
FlutterRemoveWidget.newInstance,
|
||||
],
|
||||
LintNames.await_only_futures: [
|
||||
RemoveAwait.newInstance,
|
||||
],
|
||||
|
|
|
@ -36,6 +36,8 @@ class LintNames {
|
|||
static const String avoid_unused_constructor_parameters =
|
||||
'avoid_unused_constructor_parameters';
|
||||
static const String await_only_futures = 'await_only_futures';
|
||||
static const String avoid_unnecessary_containers =
|
||||
'avoid_unnecessary_containers';
|
||||
static const String curly_braces_in_flow_control_structures =
|
||||
'curly_braces_in_flow_control_structures';
|
||||
static const String diagnostic_describe_all_properties =
|
||||
|
|
|
@ -3,14 +3,20 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analysis_server/src/services/correction/assist.dart';
|
||||
import 'package:analysis_server/src/services/correction/fix.dart';
|
||||
import 'package:analysis_server/src/services/linter/lint_names.dart';
|
||||
import 'package:analyzer_plugin/utilities/assist/assist.dart';
|
||||
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
import '../fix/fix_processor.dart';
|
||||
import 'assist_processor.dart';
|
||||
|
||||
void main() {
|
||||
defineReflectiveSuite(() {
|
||||
defineReflectiveTests(FlutterRemoveWidgetTest);
|
||||
defineReflectiveTests(RemoveContainerTest);
|
||||
defineReflectiveTests(RemoveContainerBulkTest);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -235,3 +241,101 @@ main() {
|
|||
''');
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class RemoveContainerBulkTest extends BulkFixProcessorTest {
|
||||
@override
|
||||
String get lintCode => LintNames.avoid_unnecessary_containers;
|
||||
|
||||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
}
|
||||
|
||||
@FailingTest(reason: 'nested row container not being removed')
|
||||
Future<void> test_singleFile() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget buildRow() {
|
||||
return Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget buildRow() {
|
||||
return Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class RemoveContainerTest extends FixProcessorLintTest {
|
||||
@override
|
||||
FixKind get kind => DartFixKind.REMOVE_UNNECESSARY_CONTAINER;
|
||||
|
||||
@override
|
||||
String get lintCode => LintNames.avoid_unnecessary_containers;
|
||||
|
||||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
writeTestPackageConfig(
|
||||
flutter: true,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> test_simple() async {
|
||||
await resolveTestCode('''
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget buildRow() {
|
||||
return Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
],
|
||||
)
|
||||
);
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget buildRow() {
|
||||
return Row(
|
||||
children: [
|
||||
Text('...'),
|
||||
],
|
||||
);
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue