Skip to content

Commit fabe2af

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Issue 51762. Update CompletionResponsePrinter sorting.
Bug: #51762 Change-Id: I46019bea72ac1656c97acb9da88da7dc577d8ef5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292640 Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
1 parent f8076ad commit fabe2af

20 files changed

+431
-400
lines changed

pkg/analysis_server/test/domain_completion_test.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,8 @@ suggestions
474474

475475
Future<void> test_notImported_lowerRelevance_extension_getter() async {
476476
await _configureWithWorkspaceRoot();
477+
printerConfiguration.sorting =
478+
printer.Sorting.relevanceThenCompletionThenKind;
477479

478480
newFile('$testPackageLibPath/a.dart', '''
479481
extension E1 on int {
@@ -513,6 +515,8 @@ suggestions
513515

514516
Future<void> test_notImported_lowerRelevance_extension_method() async {
515517
await _configureWithWorkspaceRoot();
518+
printerConfiguration.sorting =
519+
printer.Sorting.relevanceThenCompletionThenKind;
516520

517521
newFile('$testPackageLibPath/a.dart', '''
518522
extension E1 on int {
@@ -552,6 +556,8 @@ suggestions
552556

553557
Future<void> test_notImported_lowerRelevance_extension_setter() async {
554558
await _configureWithWorkspaceRoot();
559+
printerConfiguration.sorting =
560+
printer.Sorting.relevanceThenCompletionThenKind;
555561

556562
newFile('$testPackageLibPath/a.dart', '''
557563
extension E1 on int {
@@ -599,6 +605,8 @@ class A02 {}
599605
''');
600606

601607
await _configureWithWorkspaceRoot();
608+
printerConfiguration.sorting =
609+
printer.Sorting.relevanceThenCompletionThenKind;
602610

603611
var response = await _getTestCodeSuggestions('''
604612
import 'b.dart';
@@ -634,6 +642,8 @@ int get foo02 => 0;
634642
''');
635643

636644
await _configureWithWorkspaceRoot();
645+
printerConfiguration.sorting =
646+
printer.Sorting.relevanceThenCompletionThenKind;
637647

638648
var response = await _getTestCodeSuggestions('''
639649
import 'b.dart';
@@ -669,6 +679,8 @@ set foo02(int _) {}
669679
''');
670680

671681
await _configureWithWorkspaceRoot();
682+
printerConfiguration.sorting =
683+
printer.Sorting.relevanceThenCompletionThenKind;
672684

673685
var response = await _getTestCodeSuggestions('''
674686
import 'b.dart';
@@ -704,6 +716,8 @@ var foo02 = 0;
704716
''');
705717

706718
await _configureWithWorkspaceRoot();
719+
printerConfiguration.sorting =
720+
printer.Sorting.relevanceThenCompletionThenKind;
707721

708722
var response = await _getTestCodeSuggestions('''
709723
import 'b.dart';
@@ -919,6 +933,8 @@ class A03 {}
919933
''');
920934

921935
await _configureWithWorkspaceRoot();
936+
printerConfiguration.sorting =
937+
printer.Sorting.relevanceThenCompletionThenKind;
922938

923939
var response = await _getTestCodeSuggestions('''
924940
import 'a.dart' show A02;

pkg/analysis_server/test/services/completion/dart/completion_printer.dart

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,32 @@ class CompletionResponsePrinter {
2525
_writeSuggestions();
2626
}
2727

28+
/// Compares suggestions according to the configuration sorting.
29+
int _compareSuggestions(CompletionSuggestion a, CompletionSuggestion b) {
30+
int completionThenKind() {
31+
final completionDiff = a.completion.compareTo(b.completion);
32+
if (completionDiff != 0) {
33+
return completionDiff;
34+
} else {
35+
return a.kind.name.compareTo(b.kind.name);
36+
}
37+
}
38+
39+
switch (configuration.sorting) {
40+
case Sorting.asIs:
41+
return 0;
42+
case Sorting.completionThenKind:
43+
return completionThenKind();
44+
case Sorting.relevanceThenCompletionThenKind:
45+
final relevanceDiff = a.relevance - b.relevance;
46+
if (relevanceDiff != 0) {
47+
return -relevanceDiff;
48+
} else {
49+
return completionThenKind();
50+
}
51+
}
52+
}
53+
2854
String _escapeMultiLine(String text) {
2955
return text.replaceAll('\n', r'\n');
3056
}
@@ -255,21 +281,7 @@ class CompletionResponsePrinter {
255281

256282
void _writeSuggestions() {
257283
final filtered = response.suggestions.where(configuration.filter);
258-
final sorted = filtered.sorted((a, b) {
259-
switch (configuration.sorting) {
260-
case Sorting.asIs:
261-
return 0;
262-
case Sorting.completion:
263-
return a.completion.compareTo(b.completion);
264-
case Sorting.relevanceThenCompletion:
265-
final relevanceDiff = a.relevance - b.relevance;
266-
if (relevanceDiff != 0) {
267-
return -relevanceDiff;
268-
} else {
269-
return a.completion.compareTo(b.completion);
270-
}
271-
}
272-
});
284+
final sorted = filtered.sorted(_compareSuggestions);
273285

274286
_writelnWithIndent('suggestions');
275287

@@ -298,7 +310,7 @@ class Configuration {
298310
bool Function(CompletionSuggestion suggestion) filter;
299311

300312
Configuration({
301-
this.sorting = Sorting.relevanceThenCompletion,
313+
this.sorting = Sorting.completionThenKind,
302314
this.withDisplayText = false,
303315
this.withDocumentation = false,
304316
this.withElement = false,
@@ -315,6 +327,6 @@ class Configuration {
315327

316328
enum Sorting {
317329
asIs,
318-
completion,
319-
relevanceThenCompletion,
330+
completionThenKind,
331+
relevanceThenCompletionThenKind,
320332
}

pkg/analysis_server/test/services/completion/dart/declaration/class_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ suggestions
5959
}
6060

6161
Future<void> test_field_hasContextType_subtypes() async {
62+
printerConfiguration.sorting =
63+
printer.Sorting.relevanceThenCompletionThenKind;
64+
6265
await _checkLocations(
6366
classCode: r'''
6467
class A {
@@ -140,6 +143,9 @@ suggestions
140143
}
141144

142145
Future<void> test_getter_hasContextType_subtypes() async {
146+
printerConfiguration.sorting =
147+
printer.Sorting.relevanceThenCompletionThenKind;
148+
143149
await _checkLocations(
144150
classCode: r'''
145151
class A {

0 commit comments

Comments
 (0)