From 24f9000e97e6a798cf565bb7fbde810ae21ae667 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 22 Jun 2021 14:11:52 +0200 Subject: [PATCH] merge CompletionItemLabel into CompletionItem#label, https://github.com/microsoft/vscode/issues/39441 --- src/vs/vscode.d.ts | 29 +++++++++++++++-- src/vs/vscode.proposed.d.ts | 32 ------------------- .../api/browser/mainThreadLanguageFeatures.ts | 6 ++-- .../workbench/api/common/extHost.protocol.ts | 6 +--- .../api/common/extHostLanguageFeatures.ts | 3 +- .../api/common/extHostTypeConverters.ts | 6 +--- src/vs/workbench/api/common/extHostTypes.ts | 6 ++-- 7 files changed, 36 insertions(+), 52 deletions(-) diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index d2dcf8afa43..307270968ed 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -3975,6 +3975,31 @@ declare module 'vscode' { readonly retriggerCharacters: readonly string[]; } + /** + * Represents a structured label for completion items. + */ + export interface CompletionItemLabel { + + /** + * The label of this completion item. By default + * this is also the text that is inserted when selecting + * this completion. + */ + label: string; + + /** + * An optional string which is rendered less prominent and directly after {@link CompletionItemLabel.label name}, + * without any spacing. Should be used for function signatures or type annotations. + */ + detail?: string; + + /** + * An optional string which is rendered less prominent and after {@link CompletionItemLabel.detail}. Should be used + * for fully qualified names or file path. + */ + description?: string; + } + /** * Completion item kinds. */ @@ -4041,7 +4066,7 @@ declare module 'vscode' { * this is also the text that is inserted when selecting * this completion. */ - label: string; + label: string | CompletionItemLabel; /** * The kind of this completion item. Based on the kind @@ -4165,7 +4190,7 @@ declare module 'vscode' { * @param label The label of the completion. * @param kind The {@link CompletionItemKind kind} of the completion. */ - constructor(label: string, kind?: CompletionItemKind); + constructor(label: string | CompletionItemLabel, kind?: CompletionItemKind); } /** diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 82f626e638f..5b8ef05f434 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1396,38 +1396,6 @@ declare module 'vscode' { //#endregion - //#region https://github.com/microsoft/vscode/issues/39441 - - export interface CompletionItem { - /** - * Will be merged into CompletionItem#label - */ - label2?: CompletionItemLabel; - } - - export interface CompletionItemLabel { - - /** - * The label of this completion item. By default - * this is also the text that is inserted when selecting - * this completion. - */ - label: string; - - /** - * A string which is rendered less prominent and directly after {@link CompletionItemLabel.label name} - * without any spacing. Should be used for function signatures or type annotations. - */ - detail?: string; - - /** - * The fully qualified name, like package name or file path. Rendered after `detail`. - */ - description?: string; - } - - //#endregion - //#region @https://github.com/microsoft/vscode/issues/123601, notebook messaging export interface NotebookRendererMessage { diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 16a59acaf5a..bd011ed66c3 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -443,8 +443,10 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha private static _inflateSuggestDto(defaultRange: IRange | { insert: IRange, replace: IRange }, data: ISuggestDataDto): modes.CompletionItem { + const label = data[ISuggestDataDtoField.label]; + return { - label: data[ISuggestDataDtoField.label2] ?? data[ISuggestDataDtoField.label], + label, kind: data[ISuggestDataDtoField.kind] ?? modes.CompletionItemKind.Property, tags: data[ISuggestDataDtoField.kindModifier], detail: data[ISuggestDataDtoField.detail], @@ -452,7 +454,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha sortText: data[ISuggestDataDtoField.sortText], filterText: data[ISuggestDataDtoField.filterText], preselect: data[ISuggestDataDtoField.preselect], - insertText: typeof data.h === 'undefined' ? data[ISuggestDataDtoField.label] : data.h, + insertText: data[ISuggestDataDtoField.insertText] ?? (typeof label === 'string' ? label : label.label), range: data[ISuggestDataDtoField.range] ?? defaultRange, insertTextRules: data[ISuggestDataDtoField.insertTextRules], commitCharacters: data[ISuggestDataDtoField.commitCharacters], diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index e76c084ae0c..ac10e361c32 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1392,14 +1392,10 @@ export const enum ISuggestDataDtoField { additionalTextEdits = 'l', command = 'm', kindModifier = 'n', - - // to merge into label - label2 = 'o', } export interface ISuggestDataDto { - [ISuggestDataDtoField.label]: string; - [ISuggestDataDtoField.label2]?: string | modes.CompletionItemLabel; + [ISuggestDataDtoField.label]: string | modes.CompletionItemLabel; [ISuggestDataDtoField.kind]?: modes.CompletionItemKind; [ISuggestDataDtoField.detail]?: string; [ISuggestDataDtoField.documentation]?: string | IMarkdownString; diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 20c4ec75d45..f21bb9cd290 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -987,8 +987,7 @@ class SuggestAdapter { // x: id, // - [extHostProtocol.ISuggestDataDtoField.label]: item.label ?? '', - [extHostProtocol.ISuggestDataDtoField.label2]: item.label2, + [extHostProtocol.ISuggestDataDtoField.label]: item.label, [extHostProtocol.ISuggestDataDtoField.kind]: item.kind !== undefined ? typeConvert.CompletionItemKind.from(item.kind) : undefined, [extHostProtocol.ISuggestDataDtoField.kindModifier]: item.tags && item.tags.map(typeConvert.CompletionItemTag.from), [extHostProtocol.ISuggestDataDtoField.detail]: item.detail, diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index d9f8c54680f..62ed8915ab7 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -997,11 +997,7 @@ export namespace CompletionItem { export function to(suggestion: modes.CompletionItem, converter?: CommandsConverter): types.CompletionItem { - const result = new types.CompletionItem(typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.label); - if (typeof suggestion.label !== 'string') { - result.label2 = suggestion.label; - } - + const result = new types.CompletionItem(suggestion.label); result.insertText = suggestion.insertText; result.kind = CompletionItemKind.to(suggestion.kind); result.tags = suggestion.tags?.map(CompletionItemTag.to); diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 36efab2c1a3..086f535789d 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -1475,8 +1475,7 @@ export interface CompletionItemLabel { @es5ClassCompat export class CompletionItem implements vscode.CompletionItem { - label: string; - label2?: CompletionItemLabel; + label: string | CompletionItemLabel; kind?: CompletionItemKind; tags?: CompletionItemTag[]; detail?: string; @@ -1492,7 +1491,7 @@ export class CompletionItem implements vscode.CompletionItem { additionalTextEdits?: TextEdit[]; command?: vscode.Command; - constructor(label: string, kind?: CompletionItemKind) { + constructor(label: string | CompletionItemLabel, kind?: CompletionItemKind) { this.label = label; this.kind = kind; } @@ -1500,7 +1499,6 @@ export class CompletionItem implements vscode.CompletionItem { toJSON(): any { return { label: this.label, - label2: this.label2, kind: this.kind && CompletionItemKind[this.kind], detail: this.detail, documentation: this.documentation,