Skip to content

Commit 1ec4ea7

Browse files
DanTupCommit Queue
authored andcommitted
[analysis_server] Include "get" or "set" in LSP override completions to distinguish them
Screenshot of how this looks here: #59929 (comment) Fixes #59929 Change-Id: I220ee8facb96dbf31ee88868c8c44223de5e8406 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405007 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Keerti Parthasarathy <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 8884a8b commit 1ec4ea7

File tree

2 files changed

+196
-83
lines changed

2 files changed

+196
-83
lines changed

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

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ Future<lsp.CompletionItem?> toLspCompletionItem(
182182
label = filterText;
183183
}
184184

185+
// If this suggestion is an override, we always want to include "override" at
186+
// the start of the label even if it's not there (which may be because the
187+
// user has already typed it). We set this _after_ setting filterText because
188+
// in that case, we do not want the client to rank this item badly because
189+
// it starts "override" and the user is typing something different.
190+
if (suggestion is OverrideSuggestion && !label.startsWith('override ')) {
191+
label = 'override $label';
192+
}
193+
185194
// Trim any trailing comma from the (displayed) label.
186195
if (label.endsWith(',')) {
187196
label = label.substring(0, label.length - 1);
@@ -528,15 +537,25 @@ CompletionDetail _getCompletionDetail(
528537
? (suggestion as ElementBasedSuggestion).element
529538
: null;
530539

540+
// Usually getter/setters look the same in completion because they insert the
541+
// same text. This is not the case for overrides because they will insert
542+
// getter or setter stub code. To make this clear, we'll include get/set in
543+
// the signature.
544+
bool isGetterOverride = false, isSetterOverride = false;
545+
if (suggestion is OverrideSuggestion) {
546+
isGetterOverride = element is GetterElement;
547+
isSetterOverride = element is SetterElement;
548+
}
549+
531550
if (suggestion is NamedArgumentSuggestion) {
532551
element = suggestion.parameter;
533552
}
534553
String? parameters;
535554
if (element != null) {
536555
parameters = getParametersString2(element);
537556
// Prefer the element return type (because it may be more specific
538-
// for overrides) and fall back to the parameter type or return type from the
539-
// suggestion (handles records).
557+
// for overrides) and fall back to the parameter type or return type from
558+
// the suggestion (handles records).
540559
String? parameterType;
541560
if (element is FormalParameterElement) {
542561
parameterType = element.type.getDisplayString();
@@ -558,19 +577,31 @@ CompletionDetail _getCompletionDetail(
558577
'()' => '()',
559578
_ => '(…)',
560579
};
561-
var fullSignature = switch ((parameters, returnType)) {
562-
(null, _) => returnType ?? '',
563-
(var parameters?, null) => parameters,
564-
(var parameters?, '') => parameters,
565-
(var parameters?, _) => '$parameters → $returnType',
580+
var fullSignature = switch ((
581+
parameters,
582+
returnType,
583+
isGetterOverride,
584+
isSetterOverride,
585+
)) {
586+
(_, var returnType?, true, _) => '$returnType get',
587+
(_, var returnType?, _, true) => 'set ($returnType)',
588+
(null, _, _, _) => returnType ?? '',
589+
(var parameters?, null || '', _, _) => parameters,
590+
(var parameters?, var returnType?, _, _) => '$parameters → $returnType',
566591
};
567-
var truncatedSignature = switch ((parameters, returnType)) {
568-
(null, null) => '',
592+
var truncatedSignature = switch ((
593+
parameters,
594+
returnType,
595+
isGetterOverride,
596+
isSetterOverride,
597+
)) {
569598
// Include a leading space when no parameters so return type isn't right
570599
// against the completion label.
571-
(null, var returnType?) => ' $returnType',
572-
(_, null) || (_, '') => truncatedParameters,
573-
(_, var returnType?) => '$truncatedParameters → $returnType',
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',
574605
};
575606

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

0 commit comments

Comments
 (0)