diff --git a/extensions/npm/src/npmMain.ts b/extensions/npm/src/npmMain.ts index 4c815b8e689..b45ef8bbe03 100644 --- a/extensions/npm/src/npmMain.ts +++ b/extensions/npm/src/npmMain.ts @@ -89,7 +89,7 @@ export async function activate(context: vscode.ExtensionContext): Promise const end = line.lastIndexOf('#'); fixes.push({ - type: vscode.TerminalQuickFixType.command, + type: vscode.TerminalQuickFixType.Command, terminalCommand: line.slice(begin, end === -1 ? undefined : end - 1) }); } diff --git a/src/vs/platform/terminal/common/xterm/terminalQuickFix.ts b/src/vs/platform/terminal/common/xterm/terminalQuickFix.ts index 84e30f4c9ea..709fae40611 100644 --- a/src/vs/platform/terminal/common/xterm/terminalQuickFix.ts +++ b/src/vs/platform/terminal/common/xterm/terminalQuickFix.ts @@ -56,7 +56,15 @@ export interface ITerminalCommandSelector { export type TerminalQuickFixActionInternal = IAction | ITerminalQuickFixCommandAction | ITerminalQuickFixOpenerAction; export type TerminalQuickFixCallback = (matchResult: ITerminalCommandMatchResult) => TerminalQuickFixActionInternal[] | TerminalQuickFixActionInternal | undefined; -export type TerminalQuickFixCallbackExtension = (terminalCommand: ITerminalCommand, lines: string[] | undefined, option: ITerminalQuickFixOptions, token: CancellationToken) => Promise; +export type TerminalQuickFixCallbackExtension = (terminalCommand: ITerminalCommand, lines: string[] | undefined, option: ITerminalQuickFixOptions, token: CancellationToken) => Promise>; + +/** + * A provider result represents the values a provider, like the {@link HoverProvider}, + * may return. For once this is the actual result type `T`, like `Hover`, or a thenable that resolves + * to that type `T`. In addition, `null` and `undefined` can be returned - either directly or from a + * thenable. + */ +export type ProviderResult = T | undefined | null | Thenable; export interface ITerminalQuickFixProvider { /** @@ -65,7 +73,7 @@ export interface ITerminalQuickFixProvider { * @param token A cancellation token indicating the result is no longer needed * @return Terminal quick fix(es) if any */ - provideTerminalQuickFixes(terminalCommand: ITerminalCommand, lines: string[] | undefined, option: ITerminalQuickFixOptions, token: CancellationToken): Promise; + provideTerminalQuickFixes(terminalCommand: ITerminalCommand, lines: string[] | undefined, option: ITerminalQuickFixOptions, token: CancellationToken): Promise>; } export interface ITerminalCommandMatchResult { commandLine: string; diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 16d4acefd80..2ab4aaa86c8 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -70,7 +70,7 @@ import { CandidatePort } from 'vs/workbench/services/remote/common/remoteExplore import { ITextQueryBuilderOptions } from 'vs/workbench/services/search/common/queryBuilder'; import * as search from 'vs/workbench/services/search/common/search'; import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions'; -import { TerminalCommandMatchResult, TerminalQuickFix } from 'vscode'; +import { ProviderResult, TerminalCommandMatchResult, TerminalQuickFix } from 'vscode'; export interface IWorkspaceData extends IStaticWorkspaceData { folders: { uri: UriComponents; name: string; index: number }[]; @@ -1854,7 +1854,7 @@ export interface ExtHostTerminalServiceShape { $initEnvironmentVariableCollections(collections: [string, ISerializableEnvironmentVariableCollection][]): void; $acceptDefaultProfile(profile: ITerminalProfile, automationProfile: ITerminalProfile): void; $createContributedProfileTerminal(id: string, options: ICreateContributedTerminalProfileOptions): Promise; - $provideTerminalQuickFixes(id: string, matchResult: TerminalCommandMatchResult, token: CancellationToken): Promise; + $provideTerminalQuickFixes(id: string, matchResult: TerminalCommandMatchResult, token: CancellationToken): Promise>; } export interface ExtHostSCMShape { diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 046564d8b92..8cf26f89eb3 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -679,7 +679,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I }); } - public async $provideTerminalQuickFixes(id: string, matchResult: vscode.TerminalCommandMatchResult): Promise { + public async $provideTerminalQuickFixes(id: string, matchResult: vscode.TerminalCommandMatchResult): Promise> { const token = new CancellationTokenSource().token; if (token.isCancellationRequested) { return; diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts b/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts index 64d399b1d7e..7396c518e85 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts @@ -25,7 +25,7 @@ import { IActionWidgetService } from 'vs/platform/actionWidget/browser/actionWid import { ActionSet } from 'vs/platform/actionWidget/common/actionWidget'; import { TerminalQuickFix, toMenuItems } from 'vs/workbench/contrib/terminal/browser/widgets/terminalQuickFixMenuItems'; import { ITerminalQuickFixProviderSelector, ITerminalQuickFixService } from 'vs/workbench/contrib/terminal/common/terminal'; -import { ITerminalQuickFixOptions, IResolvedExtensionOptions, IUnresolvedExtensionOptions, ITerminalCommandSelector, ITerminalQuickFix, IInternalOptions, ITerminalQuickFixCommandAction, ITerminalQuickFixOpenerAction, TerminalQuickFixType } from 'vs/platform/terminal/common/xterm/terminalQuickFix'; +import { ITerminalQuickFixOptions, IResolvedExtensionOptions, IUnresolvedExtensionOptions, ITerminalCommandSelector, ITerminalQuickFix, IInternalOptions, ITerminalQuickFixCommandAction, ITerminalQuickFixOpenerAction, TerminalQuickFixType, ProviderResult } from 'vs/platform/terminal/common/xterm/terminalQuickFix'; import { getLinesForCommand } from 'vs/platform/terminal/common/capabilities/commandDetectionCapability'; import { IAnchor } from 'vs/base/browser/ui/contextview/contextview'; import { ILabelService } from 'vs/platform/label/common/label'; @@ -294,7 +294,7 @@ export async function getQuickFixesForCommand( openerService: IOpenerService, labelService: ILabelService, onDidRequestRerunCommand?: Emitter<{ command: string; addNewLine?: boolean }>, - getResolvedFixes?: (selector: ITerminalQuickFixOptions, lines?: string[]) => Promise + getResolvedFixes?: (selector: ITerminalQuickFixOptions, lines?: string[]) => Promise> ): Promise { const fixes: ITerminalAction[] = []; const newCommand = terminalCommand.command; diff --git a/src/vscode-dts/vscode.proposed.terminalQuickFixProvider.d.ts b/src/vscode-dts/vscode.proposed.terminalQuickFixProvider.d.ts index 1d0cbb99923..0679eed0c8c 100644 --- a/src/vscode-dts/vscode.proposed.terminalQuickFixProvider.d.ts +++ b/src/vscode-dts/vscode.proposed.terminalQuickFixProvider.d.ts @@ -12,7 +12,7 @@ declare module 'vscode' { * @param token A cancellation token indicating the result is no longer needed * @return Terminal quick fix(es) if any */ - provideTerminalQuickFixes(commandMatchResult: TerminalCommandMatchResult, token: CancellationToken): TerminalQuickFix[] | TerminalQuickFix | undefined; + provideTerminalQuickFixes(commandMatchResult: TerminalCommandMatchResult, token: CancellationToken): ProviderResult; } interface TerminalQuickFix {