Skip to content

Commit 2192131

Browse files
pqCommit Queue
authored and
Commit Queue
committed
+ remove_break fix (for unnecessary_breaks)
See: #49960 Change-Id: I67f3e58030aa800bebc045fc86114a5d9e5f7522 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/281464 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Phil Quitslund <[email protected]>
1 parent e86fe85 commit 2192131

File tree

7 files changed

+141
-3
lines changed

7 files changed

+141
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
6+
import 'package:analysis_server/src/services/correction/fix.dart';
7+
import 'package:analyzer/dart/ast/ast.dart';
8+
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
9+
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
10+
import 'package:analyzer_plugin/utilities/range_factory.dart';
11+
12+
class RemoveBreak extends CorrectionProducer {
13+
@override
14+
bool get canBeAppliedInBulk => true;
15+
16+
@override
17+
bool get canBeAppliedToFile => true;
18+
19+
@override
20+
FixKind get fixKind => DartFixKind.REMOVE_BREAK;
21+
22+
@override
23+
FixKind get multiFixKind => DartFixKind.REMOVE_BREAK_MULTI;
24+
25+
@override
26+
Future<void> compute(ChangeBuilder builder) async {
27+
final breakStatement = node;
28+
if (breakStatement is BreakStatement) {
29+
await builder.addDartFileEdit(file, (builder) {
30+
var start = utils.getLineContentStart(breakStatement.offset);
31+
var end = utils.getLineContentEnd(breakStatement.end);
32+
builder.addDeletion(range.startOffsetEndOffset(start, end));
33+
});
34+
}
35+
}
36+
}

pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml

+1-3
Original file line numberDiff line numberDiff line change
@@ -2001,9 +2001,7 @@ LintCode.unnecessary_await_in_return:
20012001
LintCode.unnecessary_brace_in_string_interps:
20022002
status: hasFix
20032003
LintCode.unnecessary_breaks:
2004-
status: needsFix
2005-
notes: |-
2006-
https://github.com/dart-lang/sdk/issues/49960
2004+
status: hasFix
20072005
LintCode.unnecessary_const:
20082006
status: hasFix
20092007
LintCode.unnecessary_constructor_name:

pkg/analysis_server/lib/src/services/correction/fix.dart

+10
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,16 @@ class DartFixKind {
944944
DartFixKindPriority.IN_FILE,
945945
'Remove awaits in file',
946946
);
947+
static const REMOVE_BREAK = FixKind(
948+
'dart.fix.remove.break',
949+
DartFixKindPriority.DEFAULT,
950+
'Remove break',
951+
);
952+
static const REMOVE_BREAK_MULTI = FixKind(
953+
'dart.fix.remove.break.multi',
954+
DartFixKindPriority.IN_FILE,
955+
'Remove unnecessary breaks in file',
956+
);
947957
static const REMOVE_CHARACTER = FixKind(
948958
'dart.fix.remove.character',
949959
DartFixKindPriority.DEFAULT,

pkg/analysis_server/lib/src/services/correction/fix_internal.dart

+4
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ import 'package:analysis_server/src/services/correction/dart/remove_argument.dar
118118
import 'package:analysis_server/src/services/correction/dart/remove_assertion.dart';
119119
import 'package:analysis_server/src/services/correction/dart/remove_assignment.dart';
120120
import 'package:analysis_server/src/services/correction/dart/remove_await.dart';
121+
import 'package:analysis_server/src/services/correction/dart/remove_break.dart';
121122
import 'package:analysis_server/src/services/correction/dart/remove_character.dart';
122123
import 'package:analysis_server/src/services/correction/dart/remove_comparison.dart';
123124
import 'package:analysis_server/src/services/correction/dart/remove_const.dart';
@@ -662,6 +663,9 @@ class FixProcessor extends BaseProcessor {
662663
LintNames.unnecessary_brace_in_string_interps: [
663664
RemoveInterpolationBraces.new,
664665
],
666+
LintNames.unnecessary_breaks: [
667+
RemoveBreak.new,
668+
],
665669
LintNames.unnecessary_const: [
666670
RemoveUnnecessaryConst.new,
667671
],

pkg/analysis_server/lib/src/services/linter/lint_names.dart

+1
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ class LintNames {
140140
static const String unawaited_futures = 'unawaited_futures';
141141
static const String unnecessary_brace_in_string_interps =
142142
'unnecessary_brace_in_string_interps';
143+
static const String unnecessary_breaks = 'unnecessary_breaks';
143144
static const String unnecessary_const = 'unnecessary_const';
144145
static const String unnecessary_constructor_name =
145146
'unnecessary_constructor_name';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analysis_server/src/services/correction/fix.dart';
6+
import 'package:analysis_server/src/services/linter/lint_names.dart';
7+
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
8+
import 'package:test_reflective_loader/test_reflective_loader.dart';
9+
10+
import 'fix_processor.dart';
11+
12+
void main() {
13+
defineReflectiveSuite(() {
14+
defineReflectiveTests(RemoveBreakBulkTest);
15+
defineReflectiveTests(RemoveBreakTest);
16+
});
17+
}
18+
19+
@reflectiveTest
20+
class RemoveBreakBulkTest extends BulkFixProcessorTest {
21+
@override
22+
List<String> get experiments => ['patterns', 'records'];
23+
24+
@override
25+
String get lintCode => LintNames.unnecessary_breaks;
26+
27+
Future<void> test_singleFile() async {
28+
await resolveTestCode('''
29+
f() {
30+
switch (1) {
31+
case 1:
32+
f();
33+
break;
34+
case 2:
35+
f();
36+
break;
37+
}
38+
}
39+
''');
40+
await assertHasFix('''
41+
f() {
42+
switch (1) {
43+
case 1:
44+
f();
45+
case 2:
46+
f();
47+
}
48+
}
49+
''');
50+
}
51+
}
52+
53+
@reflectiveTest
54+
class RemoveBreakTest extends FixProcessorLintTest {
55+
@override
56+
List<String> get experiments => ['patterns', 'records'];
57+
58+
@override
59+
FixKind get kind => DartFixKind.REMOVE_BREAK;
60+
61+
@override
62+
String get lintCode => LintNames.unnecessary_breaks;
63+
64+
Future<void> test_single() async {
65+
await resolveTestCode('''
66+
f() {
67+
switch (1) {
68+
case 1:
69+
f();
70+
break;
71+
case 2:
72+
f();
73+
}
74+
}
75+
''');
76+
await assertHasFix('''
77+
f() {
78+
switch (1) {
79+
case 1:
80+
f();
81+
case 2:
82+
f();
83+
}
84+
}
85+
''');
86+
}
87+
}

pkg/analysis_server/test/src/services/correction/fix/test_all.dart

+2
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ import 'remove_argument_test.dart' as remove_argument;
147147
import 'remove_assertion_test.dart' as remove_assertion;
148148
import 'remove_assignment_test.dart' as remove_assignment;
149149
import 'remove_await_test.dart' as remove_await;
150+
import 'remove_break_test.dart' as remove_break;
150151
import 'remove_character_test.dart' as remove_character;
151152
import 'remove_comparison_test.dart' as remove_comparison;
152153
import 'remove_const_test.dart' as remove_const;
@@ -381,6 +382,7 @@ void main() {
381382
remove_assertion.main();
382383
remove_assignment.main();
383384
remove_await.main();
385+
remove_break.main();
384386
remove_character.main();
385387
remove_comparison.main();
386388
remove_const.main();

0 commit comments

Comments
 (0)