[DAS] Fixes when clause cases on 'Convert to switch expression' assist
Fixes: https://github.com/dart-lang/sdk/issues/60966
Change-Id: I68187c06528f7328a832bdb6d11170f233ab5e2a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435921
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Felipe Morschel <git@fmorschel.dev>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
index 5407bbd..c97a9b1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
@@ -106,7 +106,11 @@
invocation.offset,
invocation.argumentList.leftParenthesis.end,
);
- builder.addDeletion(deletion);
+ if (hasComment) {
+ builder.addDeletion(deletion);
+ } else {
+ builder.addSimpleReplacement(deletion, ' ');
+ }
builder.addDeletion(
range.entity(invocation.argumentList.rightParenthesis),
);
@@ -154,12 +158,12 @@
var lastColon = lastCase.colon;
var patternCode = group.patternCases
- .map((patternCase) => patternCase.guardedPattern.pattern)
+ .map((patternCase) => patternCase.guardedPattern)
.map((pattern) => utils.getNodeText(pattern))
.join(' || ');
builder.addSimpleReplacement(
range.startEnd(firstCase.keyword, lastColon),
- '$patternCode => ',
+ '$patternCode =>',
);
convertArgumentStatements(
@@ -248,7 +252,7 @@
var lastColon = lastCase.colon;
var patternCode = group.patternCases
- .map((patternCase) => patternCase.guardedPattern.pattern)
+ .map((patternCase) => patternCase.guardedPattern)
.map((pattern) => utils.getNodeText(pattern))
.join(' || ');
builder.addSimpleReplacement(
@@ -334,7 +338,7 @@
var lastCase = group.patternCases.last;
var patternCode = group.patternCases
- .map((patternCase) => patternCase.guardedPattern.pattern)
+ .map((patternCase) => patternCase.guardedPattern)
.map((pattern) => utils.getNodeText(pattern))
.join(' || ');
builder.addSimpleReplacement(
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
index b403d62..8519ef2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
@@ -100,8 +100,8 @@
Color.red => 'red', // Red.
Color.blue => 'blue',
// Not green.
- Color.green => throw 'Green is bad',
- Color.yellow => /**/
+ Color.green => throw 'Green is bad',
+ Color.yellow =>
// Yellow is OK.
'yellow'
});
@@ -164,8 +164,8 @@
Color.red => 'red', // Red.
Color.blue => 'blue',
// Not green.
- Color.green => throw 'Green is bad',
- Color.yellow => /**/
+ Color.green => throw 'Green is bad',
+ Color.yellow =>
// Yellow is OK.
'yellow'
});
@@ -191,7 +191,28 @@
print(switch (s) {
'foo' => 'foo',
'bar' => 'bar',
- _ => throw 'unrecognized'
+ _ => throw 'unrecognized'
+ });
+}
+''');
+ }
+
+ Future<void> test_argument_when() async {
+ await resolveTestCode('''
+void foo(int a, bool x) {
+ swit^ch (a) {
+ case 1 when x:
+ print(1);
+ default:
+ print(3);
+ }
+}
+''');
+ await assertHasAssist('''
+void foo(int a, bool x) {
+ print(switch (a) {
+ 1 when x => 1,
+ _ => 3
});
}
''');
@@ -476,6 +497,29 @@
''');
}
+ Future<void> test_assignment_when() async {
+ await resolveTestCode('''
+void foo(int a, bool x) {
+ int value;
+ swit^ch (a) {
+ case 1 when x:
+ value = 1;
+ default:
+ value = 3;
+ }
+}
+''');
+ await assertHasAssist('''
+void foo(int a, bool x) {
+ int value;
+ value = switch (a) {
+ 1 when x => 1,
+ _ => 3
+ };
+}
+''');
+ }
+
Future<void> test_empty() async {
await resolveTestCode('''
void f(int x) {
@@ -824,4 +868,25 @@
}
''');
}
+
+ Future<void> test_return_when() async {
+ await resolveTestCode('''
+int foo(int a, bool x) {
+ swit^ch (a) {
+ case 1 when x:
+ return 1;
+ default:
+ return 3;
+ }
+}
+''');
+ await assertHasAssist('''
+int foo(int a, bool x) {
+ return switch (a) {
+ 1 when x => 1,
+ _ => 3
+ };
+}
+''');
+ }
}