Skip to content

Commit 44149b2

Browse files
DanTupCommit Queue
authored andcommitted
[analysis_server] Tweak completion labels to make non-invocations not look like invocations
This adds a space between the label and the parameter/signature when the completion is not an invocation, so the the same information is visible but it's more obviously not an invocation. Fixes #60099 Change-Id: I6b40cbac5f85ace3523c8f7d6309684cb2da9470 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/411022 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent dd72ef9 commit 44149b2

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

pkg/analysis_server/lib/src/lsp/completion_utils.dart

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ Future<lsp.CompletionItem?> toLspCompletionItem(
213213

214214
var labelDetails = _getCompletionDetail(
215215
suggestion,
216+
isCallable: isCallable,
217+
isInvocation: isInvocation,
216218
supportsDeprecated:
217219
supportsCompletionDeprecatedFlag || supportsDeprecatedTag,
218220
);
@@ -525,6 +527,8 @@ List<lsp.CompletionItemKind> _elementToCompletionItemKind(
525527
CompletionDetail _getCompletionDetail(
526528
CandidateSuggestion suggestion, {
527529
required bool supportsDeprecated,
530+
required bool isCallable,
531+
required bool isInvocation,
528532
}) {
529533
String? returnType;
530534
if (suggestion is FunctionCall) {
@@ -541,7 +545,8 @@ CompletionDetail _getCompletionDetail(
541545
// same text. This is not the case for overrides because they will insert
542546
// getter or setter stub code. To make this clear, we'll include get/set in
543547
// the signature.
544-
bool isGetterOverride = false, isSetterOverride = false;
548+
var isOverride = suggestion is OverrideSuggestion;
549+
var isGetterOverride = false, isSetterOverride = false;
545550
if (suggestion is OverrideSuggestion) {
546551
isGetterOverride = element is GetterElement;
547552
isSetterOverride = element is SetterElement;
@@ -594,14 +599,21 @@ CompletionDetail _getCompletionDetail(
594599
returnType,
595600
isGetterOverride,
596601
isSetterOverride,
602+
// When not callable/invocation/override, signatures will have a leading
603+
// space, so that they are not formatted like calls, but the signature is
604+
// instead just informational.
605+
(isCallable && isInvocation) || isOverride,
597606
)) {
598607
// Include a leading space when no parameters so return type isn't right
599608
// against the completion label.
600-
(_, var returnType?, true, _) => ' $returnType get',
601-
(_, var returnType?, _, true) => ' set ($returnType)',
602-
(null, var returnType?, _, _) => ' $returnType',
603-
(_, null || '', _, _) => truncatedParameters,
604-
(_, var returnType?, _, _) => '$truncatedParameters → $returnType',
609+
(_, var returnType?, true, _, _) => ' $returnType get',
610+
(_, var returnType?, _, true, _) => ' set ($returnType)',
611+
(null, var returnType?, _, _, _) => ' $returnType',
612+
(null || '', _, _, _, _) => '',
613+
(_, null || '', _, _, true) => truncatedParameters,
614+
(_, null || '', _, _, false) => ' $truncatedParameters',
615+
(_, var returnType?, _, _, true) => '$truncatedParameters → $returnType',
616+
(_, var returnType?, _, _, false) => ' $truncatedParameters → $returnType',
605617
};
606618

607619
// Use the full signature in the details popup.

pkg/analysis_server/test/lsp/completion_dart_test.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,21 @@ class CompletionLabelDetailsTest extends AbstractCompletionTest {
359359
setCompletionItemLabelDetailsSupport();
360360
}
361361

362+
Future<void> test_combinator_function() async {
363+
var content = '''
364+
import 'dart:math' show min^
365+
''';
366+
367+
await expectLabel(
368+
content,
369+
label: 'min',
370+
labelDetail: ' (…) → T',
371+
labelDescription: null,
372+
filterText: null,
373+
detail: '(T a, T b) → T',
374+
);
375+
}
376+
362377
Future<void> test_constructor_argument() async {
363378
var content = '''
364379
var a = Foo(^);

0 commit comments

Comments
 (0)