From 14ae1247f84fa682c77a21f8189bd69a15971c46 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 13 Sep 2019 16:14:08 -0700 Subject: [PATCH] Use const enums for minimized ISuggestDataDto types From #71060 **Problem** ISuggestDataDto currently uses opaque property names in order to keep the size of the json object down. This makes the code difficult to read **Proposed Fix** Use a const enum to map human readable property name to the short names actually used for the json --- .../api/browser/mainThreadLanguageFeatures.ts | 30 ++++++------- .../workbench/api/common/extHost.protocol.ts | 45 +++++++++++++------ .../api/common/extHostLanguageFeatures.ts | 24 +++++----- 3 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 23e090fd09c..0ea4d540b11 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -11,7 +11,7 @@ import * as search from 'vs/workbench/contrib/search/common/search'; import { CancellationToken } from 'vs/base/common/cancellation'; import { Position as EditorPosition } from 'vs/editor/common/core/position'; import { Range as EditorRange, IRange } from 'vs/editor/common/core/range'; -import { ExtHostContext, MainThreadLanguageFeaturesShape, ExtHostLanguageFeaturesShape, MainContext, IExtHostContext, ILanguageConfigurationDto, IRegExpDto, IIndentationRuleDto, IOnEnterRuleDto, ILocationDto, IWorkspaceSymbolDto, reviveWorkspaceEditDto, IDocumentFilterDto, IDefinitionLinkDto, ISignatureHelpProviderMetadataDto, ILinkDto, ICallHierarchyItemDto, ISuggestDataDto, ICodeActionDto } from '../common/extHost.protocol'; +import { ExtHostContext, MainThreadLanguageFeaturesShape, ExtHostLanguageFeaturesShape, MainContext, IExtHostContext, ILanguageConfigurationDto, IRegExpDto, IIndentationRuleDto, IOnEnterRuleDto, ILocationDto, IWorkspaceSymbolDto, reviveWorkspaceEditDto, IDocumentFilterDto, IDefinitionLinkDto, ISignatureHelpProviderMetadataDto, ILinkDto, ICallHierarchyItemDto, ISuggestDataDto, ICodeActionDto, ISuggestDataDtoField } from '../common/extHost.protocol'; import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry'; import { LanguageConfiguration, IndentationRule, OnEnterRule } from 'vs/editor/common/modes/languageConfiguration'; import { IModeService } from 'vs/editor/common/services/modeService'; @@ -328,20 +328,20 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha private static _inflateSuggestDto(defaultRange: IRange, data: ISuggestDataDto): modes.CompletionItem { return { - label: data.a, - kind: data.b, - tags: data.n, - detail: data.c, - documentation: data.d, - sortText: data.e, - filterText: data.f, - preselect: data.g, - insertText: typeof data.h === 'undefined' ? data.a : data.h, - insertTextRules: data.i, - range: data.j || defaultRange, - commitCharacters: data.k, - additionalTextEdits: data.l, - command: data.m, + label: data[ISuggestDataDtoField.label], + kind: data[ISuggestDataDtoField.kind], + tags: data[ISuggestDataDtoField.kindModifier], + detail: data[ISuggestDataDtoField.detail], + documentation: data[ISuggestDataDtoField.documentation], + sortText: data[ISuggestDataDtoField.sortText], + filterText: data[ISuggestDataDtoField.filterText], + preselect: data[ISuggestDataDtoField.preselect], + insertText: typeof data.h === 'undefined' ? data[ISuggestDataDtoField.label] : data.h, + insertTextRules: data[ISuggestDataDtoField.insertTextRules], + range: data[ISuggestDataDtoField.range] || defaultRange, + commitCharacters: data[ISuggestDataDtoField.commitCharacters], + additionalTextEdits: data[ISuggestDataDtoField.additionalTextEdits], + command: data[ISuggestDataDtoField.command], // not-standard _id: data.x, }; diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index b7bddc60c4d..9091b114926 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -929,21 +929,38 @@ export class IdObject { } } +export const enum ISuggestDataDtoField { + label = 'a', + kind = 'b', + detail = 'c', + documentation = 'd', + sortText = 'e', + filterText = 'f', + preselect = 'g', + insertText = 'h', + insertTextRules = 'i', + range = 'j', + commitCharacters = 'k', + additionalTextEdits = 'l', + command = 'm', + kindModifier = 'n', +} + export interface ISuggestDataDto { - a/* label */: string; - b/* kind */: modes.CompletionItemKind; - c/* detail */?: string; - d/* documentation */?: string | IMarkdownString; - e/* sortText */?: string; - f/* filterText */?: string; - g/* preselect */?: boolean; - h/* insertText */?: string; - i/* insertTextRules */?: modes.CompletionItemInsertTextRule; - j/* range */?: IRange; - k/* commitCharacters */?: string[]; - l/* additionalTextEdits */?: ISingleEditOperation[]; - m/* command */?: modes.Command; - n/* kindModifier */?: modes.CompletionItemTag[]; + [ISuggestDataDtoField.label]: string; + [ISuggestDataDtoField.kind]: modes.CompletionItemKind; + [ISuggestDataDtoField.detail]?: string; + [ISuggestDataDtoField.documentation]?: string | IMarkdownString; + [ISuggestDataDtoField.sortText]?: string; + [ISuggestDataDtoField.filterText]?: string; + [ISuggestDataDtoField.preselect]?: boolean; + [ISuggestDataDtoField.insertText]?: string; + [ISuggestDataDtoField.insertTextRules]?: modes.CompletionItemInsertTextRule; + [ISuggestDataDtoField.range]?: IRange; + [ISuggestDataDtoField.commitCharacters]?: string[]; + [ISuggestDataDtoField.additionalTextEdits]?: ISingleEditOperation[]; + [ISuggestDataDtoField.command]?: modes.Command; + [ISuggestDataDtoField.kindModifier]?: modes.CompletionItemTag[]; // not-standard x?: ChainedCacheId; } diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 0a198614c55..94636f78be5 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -724,18 +724,18 @@ class SuggestAdapter { // x: id, // - a: item.label, - b: typeConvert.CompletionItemKind.from(item.kind), - n: item.tags && item.tags.map(typeConvert.CompletionItemTag.from), - c: item.detail, - d: typeof item.documentation === 'undefined' ? undefined : typeConvert.MarkdownString.fromStrict(item.documentation), - e: item.sortText, - f: item.filterText, - g: item.preselect, - i: item.keepWhitespace ? modes.CompletionItemInsertTextRule.KeepWhitespace : 0, - k: item.commitCharacters, - l: item.additionalTextEdits && item.additionalTextEdits.map(typeConvert.TextEdit.from), - m: this._commands.toInternal(item.command, disposables), + [extHostProtocol.ISuggestDataDtoField.label]: item.label, + [extHostProtocol.ISuggestDataDtoField.kind]: typeConvert.CompletionItemKind.from(item.kind), + [extHostProtocol.ISuggestDataDtoField.kindModifier]: item.tags && item.tags.map(typeConvert.CompletionItemTag.from), + [extHostProtocol.ISuggestDataDtoField.detail]: item.detail, + [extHostProtocol.ISuggestDataDtoField.documentation]: typeof item.documentation === 'undefined' ? undefined : typeConvert.MarkdownString.fromStrict(item.documentation), + [extHostProtocol.ISuggestDataDtoField.sortText]: item.sortText, + [extHostProtocol.ISuggestDataDtoField.filterText]: item.filterText, + [extHostProtocol.ISuggestDataDtoField.preselect]: item.preselect, + [extHostProtocol.ISuggestDataDtoField.insertTextRules]: item.keepWhitespace ? modes.CompletionItemInsertTextRule.KeepWhitespace : 0, + [extHostProtocol.ISuggestDataDtoField.commitCharacters]: item.commitCharacters, + [extHostProtocol.ISuggestDataDtoField.additionalTextEdits]: item.additionalTextEdits && item.additionalTextEdits.map(typeConvert.TextEdit.from), + [extHostProtocol.ISuggestDataDtoField.command]: this._commands.toInternal(item.command, disposables), }; // 'insertText'-logic -- GitLab