diff --git a/packages/plugin-ext/src/plugin/plugin-context.ts b/packages/plugin-ext/src/plugin/plugin-context.ts index 8e601b5ac9929..23dcde5c1b69e 100644 --- a/packages/plugin-ext/src/plugin/plugin-context.ts +++ b/packages/plugin-ext/src/plugin/plugin-context.ts @@ -160,6 +160,7 @@ import { TerminalLocation, TerminalExitReason, TerminalProfile, + TerminalQuickFixType, InlayHint, InlayHintKind, InlayHintLabelPart, @@ -582,6 +583,10 @@ export function createAPIFactory( /** @stubbed ProfileContentHandler */ registerProfileContentHandler(id: string, profileContentHandler: theia.ProfileContentHandler): theia.Disposable { return Disposable.NULL; + }, + /** @stubbed TerminalQuickFixProvider */ + registerTerminalQuickFixProvider(id: string, provider: theia.TerminalQuickFixProvider): theia.Disposable { + return terminalExt.registerTerminalQuickFixProvider(id, provider); } }; @@ -1363,7 +1368,8 @@ export function createAPIFactory( TerminalLocation, TerminalExitReason, DocumentPasteEdit, - ExternalUriOpenerPriority + ExternalUriOpenerPriority, + TerminalQuickFixType }; }; } diff --git a/packages/plugin-ext/src/plugin/terminal-ext.ts b/packages/plugin-ext/src/plugin/terminal-ext.ts index 891eed6d998ca..6f439ed783ce5 100644 --- a/packages/plugin-ext/src/plugin/terminal-ext.ts +++ b/packages/plugin-ext/src/plugin/terminal-ext.ts @@ -246,6 +246,11 @@ export class TerminalServiceExtImpl implements TerminalServiceExt { }); } + /** @stubbed */ + registerTerminalQuickFixProvider(id: string, provider: theia.TerminalQuickFixProvider): theia.Disposable { + return Disposable.NULL; + } + protected isExtensionTerminalOptions(options: theia.TerminalOptions | theia.ExtensionTerminalOptions): options is theia.ExtensionTerminalOptions { return 'pty' in options; } diff --git a/packages/plugin-ext/src/plugin/types-impl.ts b/packages/plugin-ext/src/plugin/types-impl.ts index 34e379f7b4d7c..723d6dfb067eb 100644 --- a/packages/plugin-ext/src/plugin/types-impl.ts +++ b/packages/plugin-ext/src/plugin/types-impl.ts @@ -2066,6 +2066,11 @@ export enum TerminalExitReason { Extension = 4, } +export enum TerminalQuickFixType { + command = 'command', + opener = 'opener' +} + @es5ClassCompat export class FileDecoration { diff --git a/packages/plugin/src/theia-proposed.d.ts b/packages/plugin/src/theia-proposed.d.ts index 6f094ac01508d..ba478fee5564a 100644 --- a/packages/plugin/src/theia-proposed.d.ts +++ b/packages/plugin/src/theia-proposed.d.ts @@ -720,6 +720,46 @@ export module '@theia/plugin' { } // #endregion ProfileContentHandler + + // #region TerminalQuickFixProvider + + export namespace window { + /** + * @param provider A terminal quick fix provider + * @return A {@link Disposable} that un-registers the provider when being disposed + */ + export function registerTerminalQuickFixProvider(id: string, provider: TerminalQuickFixProvider): Disposable; + } + + export interface TerminalQuickFixProvider { + /** + * Provides terminal quick fixes + * @param commandMatchResult The command match result for which to provide quick fixes + * @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; + } + + export interface TerminalCommandMatchResult { + commandLine: string; + commandLineMatch: RegExpMatchArray; + outputMatch?: { + regexMatch: RegExpMatchArray; + outputLines?: string[]; + }; + } + + interface TerminalQuickFix { + type: TerminalQuickFixType; + } + + enum TerminalQuickFixType { + command = 'command', + opener = 'opener' + } + + // #endRegion TerminalQuickFixProvider } /**