Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit e5b2cb0

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Fix for filtering name argument suggestions for Cider.
[email protected], [email protected] Bug: https://buganizer.corp.google.com/issues/157673517 Change-Id: If7b39b9986963f5936a77556d5ac528b71d365e6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149884 Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Keerti Parthasarathy <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 9eef0a1 commit e5b2cb0

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

pkg/analysis_server/lib/src/cider/completion.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,18 @@ class _FilterSort {
293293
return '';
294294
}
295295

296-
double _score(CompletionSuggestion e) => _matcher.score(e.completion);
296+
double _score(CompletionSuggestion e) {
297+
var suggestionTextToMatch = e.completion;
298+
299+
if (e.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
300+
var index = suggestionTextToMatch.indexOf(':');
301+
if (index != -1) {
302+
suggestionTextToMatch = suggestionTextToMatch.substring(0, index);
303+
}
304+
}
305+
306+
return _matcher.score(suggestionTextToMatch);
307+
}
297308
}
298309

299310
/// [CompletionSuggestion] scored using [FuzzyMatcher].

pkg/analysis_server/test/src/cider/completion_test.dart

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import 'package:analysis_server/src/cider/completion.dart';
66
import 'package:analyzer/source/line_info.dart';
77
import 'package:analyzer_plugin/protocol/protocol_common.dart'
8-
show CompletionSuggestion, ElementKind;
8+
show CompletionSuggestion, CompletionSuggestionKind, ElementKind;
99
import 'package:meta/meta.dart';
1010
import 'package:test/test.dart';
1111
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -214,6 +214,32 @@ var a = Fo^;
214214
]);
215215
}
216216

217+
Future<void> test_filterSort_namedArgument_hasPrefix() async {
218+
await _compute(r'''
219+
void foo({int aaa, int bbb});
220+
221+
void f() {
222+
foo(a^);
223+
}
224+
''');
225+
226+
_assertHasNamedArgument(name: 'aaa');
227+
_assertNoNamedArgument(name: 'bbb');
228+
}
229+
230+
Future<void> test_filterSort_namedArgument_noPrefix() async {
231+
await _compute(r'''
232+
void foo({int aaa, int bbb});
233+
234+
void f() {
235+
foo(^);
236+
}
237+
''');
238+
239+
_assertHasNamedArgument(name: 'aaa');
240+
_assertHasNamedArgument(name: 'bbb');
241+
}
242+
217243
Future<void> test_filterSort_preferLocal() async {
218244
await _compute(r'''
219245
var a = 0;
@@ -288,6 +314,12 @@ main() {
288314
return matching.single;
289315
}
290316

317+
CompletionSuggestion _assertHasNamedArgument({@required String name}) {
318+
var matching = _matchingNamedArgumentSuggestions(name: name);
319+
expect(matching, hasLength(1), reason: 'Expected exactly one completion');
320+
return matching.single;
321+
}
322+
291323
CompletionSuggestion _assertHasTopLevelVariable({@required String text}) {
292324
var matching = _matchingCompletions(
293325
text: text,
@@ -309,6 +341,11 @@ main() {
309341
expect(matching, isEmpty, reason: 'Expected zero completions');
310342
}
311343

344+
void _assertNoNamedArgument({@required String name}) {
345+
var matching = _matchingNamedArgumentSuggestions(name: name);
346+
expect(matching, isEmpty, reason: 'Expected zero completions');
347+
}
348+
312349
void _assertOrder(List<CompletionSuggestion> suggestions) {
313350
var lastIndex = -2;
314351
for (var suggestion in suggestions) {
@@ -352,6 +389,22 @@ main() {
352389
}).toList();
353390
}
354391

392+
List<CompletionSuggestion> _matchingNamedArgumentSuggestions({
393+
@required String name,
394+
}) {
395+
return _suggestions.where((e) {
396+
if (e.kind != CompletionSuggestionKind.NAMED_ARGUMENT) {
397+
return false;
398+
}
399+
400+
if (!e.completion.startsWith('$name:')) {
401+
return false;
402+
}
403+
404+
return true;
405+
}).toList();
406+
}
407+
355408
CiderCompletionComputer _newComputer() {
356409
return _computer = CiderCompletionComputer(
357410
logger,

0 commit comments

Comments
 (0)