From eb6050d8a8c8263252f2db8250699c8a71454e25 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 8 Mar 2022 14:32:58 -0800 Subject: [PATCH] Preserve path item details for JS/TS completions Fixes #144455 --- .../src/languageFeatures/completions.ts | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/extensions/typescript-language-features/src/languageFeatures/completions.ts b/extensions/typescript-language-features/src/languageFeatures/completions.ts index 8cd15f148ea..e505e794279 100644 --- a/extensions/typescript-language-features/src/languageFeatures/completions.ts +++ b/extensions/typescript-language-features/src/languageFeatures/completions.ts @@ -7,6 +7,7 @@ import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; import { Command, CommandManager } from '../commands/commandManager'; import type * as Proto from '../protocol'; +import protocol = require('../protocol'); import * as PConst from '../protocol.const'; import { ClientCapability, ITypeScriptServiceClient, ServerResponse } from '../typescriptService'; import API from '../utils/api'; @@ -134,18 +135,7 @@ class MyCompletionItem extends vscode.CompletionItem { this.kind = vscode.CompletionItemKind.Color; } - if (tsEntry.kind === PConst.Kind.script) { - for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) { - if (kindModifiers.has(extModifier)) { - if (tsEntry.name.toLowerCase().endsWith(extModifier)) { - this.detail = tsEntry.name; - } else { - this.detail = tsEntry.name + extModifier; - } - break; - } - } - } + this.detail = getScriptKindDetails(tsEntry); } this.resolveRange(); @@ -206,7 +196,11 @@ class MyCompletionItem extends vscode.CompletionItem { const detail = response.body[0]; - this.detail = this.getDetails(client, detail); + const newItemDetails = this.getDetails(client, detail); + if (newItemDetails) { + this.detail = newItemDetails; + } + this.documentation = this.getDocumentation(client, detail, this.document.uri); const codeAction = this.getCodeActions(detail, filepath); @@ -253,6 +247,11 @@ class MyCompletionItem extends vscode.CompletionItem { ): string | undefined { const parts: string[] = []; + if (detail.kind === PConst.Kind.script) { + // details were already added + return undefined; + } + for (const action of detail.codeActions ?? []) { parts.push(action.description); } @@ -519,6 +518,24 @@ class MyCompletionItem extends vscode.CompletionItem { } } +function getScriptKindDetails(tsEntry: protocol.CompletionEntry,): string | undefined { + if (!tsEntry.kindModifiers || tsEntry.kind !== PConst.Kind.script) { + return; + } + + const kindModifiers = parseKindModifier(tsEntry.kindModifiers); + for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) { + if (kindModifiers.has(extModifier)) { + if (tsEntry.name.toLowerCase().endsWith(extModifier)) { + return tsEntry.name; + } else { + return tsEntry.name + extModifier; + } + } + } + return undefined; +} + class CompletionAcceptedCommand implements Command { public static readonly ID = '_typescript.onCompletionAccepted';