mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-28 05:37:48 +01:00
Merge pull request #190609 from microsoft/tyriar/162950_4
Implement vscode command terminal quick fixes
This commit is contained in:
@@ -20,10 +20,9 @@ import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteA
|
||||
import { OperatingSystem, OS } from 'vs/base/common/platform';
|
||||
import { TerminalEditorLocationOptions } from 'vscode';
|
||||
import { Promises } from 'vs/base/common/async';
|
||||
import { TerminalQuickFixType } from 'vs/workbench/api/common/extHostTypes';
|
||||
import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable';
|
||||
import { ITerminalLinkProviderService } from 'vs/workbench/contrib/terminalContrib/links/browser/links';
|
||||
import { ITerminalQuickFixService, ITerminalQuickFix } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
import { ITerminalQuickFixService, ITerminalQuickFix, TerminalQuickFixType } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
|
||||
|
||||
@extHostNamedCustomer(MainContext.MainThreadTerminalService)
|
||||
@@ -448,10 +447,12 @@ export function getOutputMatchForLines(lines: string[], outputMatcher: ITerminal
|
||||
}
|
||||
|
||||
function parseQuickFix(id: string, source: string, fix: TerminalQuickFix): ITerminalQuickFix {
|
||||
let type = TerminalQuickFixType.Command;
|
||||
let type = TerminalQuickFixType.TerminalCommand;
|
||||
if ('uri' in fix) {
|
||||
fix.uri = URI.revive(fix.uri);
|
||||
type = TerminalQuickFixType.Opener;
|
||||
} else if ('id' in fix) {
|
||||
type = TerminalQuickFixType.VscodeCommand;
|
||||
}
|
||||
return { id, type, source, ...fix };
|
||||
}
|
||||
|
||||
@@ -1478,7 +1478,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
TerminalLocation: extHostTypes.TerminalLocation,
|
||||
TerminalProfile: extHostTypes.TerminalProfile,
|
||||
TerminalExitReason: extHostTypes.TerminalExitReason,
|
||||
TerminalQuickFixType: extHostTypes.TerminalQuickFixType,
|
||||
TextDocumentSaveReason: extHostTypes.TextDocumentSaveReason,
|
||||
TextEdit: extHostTypes.TextEdit,
|
||||
SnippetTextEdit: extHostTypes.SnippetTextEdit,
|
||||
|
||||
@@ -52,8 +52,9 @@ export enum TerminalOutputAnchor {
|
||||
}
|
||||
|
||||
export enum TerminalQuickFixType {
|
||||
Command = 0,
|
||||
Opener = 1
|
||||
TerminalCommand = 0,
|
||||
Opener = 1,
|
||||
Command = 3
|
||||
}
|
||||
|
||||
@es5ClassCompat
|
||||
|
||||
@@ -29,7 +29,7 @@ export interface ITerminalQuickFixProviderSelector {
|
||||
provider: ITerminalQuickFixProvider;
|
||||
}
|
||||
|
||||
export type TerminalQuickFixActionInternal = IAction | ITerminalQuickFixCommandAction | ITerminalQuickFixOpenerAction;
|
||||
export type TerminalQuickFixActionInternal = IAction | ITerminalQuickFixExecuteTerminalCommandAction | ITerminalQuickFixOpenerAction;
|
||||
export type TerminalQuickFixCallback = (matchResult: ITerminalCommandMatchResult) => TerminalQuickFixActionInternal[] | TerminalQuickFixActionInternal | undefined;
|
||||
export type TerminalQuickFixCallbackExtension = (terminalCommand: ITerminalCommand, lines: string[] | undefined, option: ITerminalQuickFixOptions, token: CancellationToken) => Promise<ITerminalQuickFix[] | ITerminalQuickFix | undefined>;
|
||||
|
||||
@@ -44,9 +44,10 @@ export interface ITerminalQuickFixProvider {
|
||||
}
|
||||
|
||||
export enum TerminalQuickFixType {
|
||||
Command = 0,
|
||||
TerminalCommand = 0,
|
||||
Opener = 1,
|
||||
Port = 2
|
||||
Port = 2,
|
||||
VscodeCommand = 3
|
||||
}
|
||||
|
||||
export interface ITerminalQuickFixOptions {
|
||||
@@ -63,8 +64,8 @@ export interface ITerminalQuickFix {
|
||||
source: string;
|
||||
}
|
||||
|
||||
export interface ITerminalQuickFixCommandAction extends ITerminalQuickFix {
|
||||
type: TerminalQuickFixType.Command;
|
||||
export interface ITerminalQuickFixExecuteTerminalCommandAction extends ITerminalQuickFix {
|
||||
type: TerminalQuickFixType.TerminalCommand;
|
||||
terminalCommand: string;
|
||||
// TODO: Should this depend on whether alt is held?
|
||||
addNewLine?: boolean;
|
||||
@@ -73,6 +74,9 @@ export interface ITerminalQuickFixOpenerAction extends ITerminalQuickFix {
|
||||
type: TerminalQuickFixType.Opener;
|
||||
uri: URI;
|
||||
}
|
||||
export interface ITerminalQuickFixCommandAction extends ITerminalQuickFix {
|
||||
title: string;
|
||||
}
|
||||
|
||||
export interface ITerminalCommandMatchResult {
|
||||
commandLine: string;
|
||||
|
||||
@@ -28,12 +28,13 @@ import { IAnchor } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import { ILabelService } from 'vs/platform/label/common/label';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ITerminalQuickFixInternalOptions, ITerminalQuickFixResolvedExtensionOptions, ITerminalQuickFix, ITerminalQuickFixCommandAction, ITerminalQuickFixOpenerAction, ITerminalQuickFixOptions, ITerminalQuickFixProviderSelector, ITerminalQuickFixService, ITerminalQuickFixUnresolvedExtensionOptions, TerminalQuickFixType } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
import { ITerminalQuickFixInternalOptions, ITerminalQuickFixResolvedExtensionOptions, ITerminalQuickFix, ITerminalQuickFixExecuteTerminalCommandAction, ITerminalQuickFixOpenerAction, ITerminalQuickFixOptions, ITerminalQuickFixProviderSelector, ITerminalQuickFixService, ITerminalQuickFixUnresolvedExtensionOptions, TerminalQuickFixType, ITerminalQuickFixCommandAction } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
import { ITerminalCommandSelector } from 'vs/platform/terminal/common/terminal';
|
||||
import { ActionListItemKind, IActionListItem } from 'vs/platform/actionWidget/browser/actionList';
|
||||
import { CodeActionKind } from 'vs/editor/contrib/codeAction/common/types';
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
import { ThemeIcon } from 'vs/base/common/themables';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
|
||||
const quickFixSelectors = [
|
||||
DecorationSelector.QuickFix,
|
||||
@@ -75,6 +76,7 @@ export class TerminalQuickFixAddon extends Disposable implements ITerminalAddon,
|
||||
private readonly _aliases: string[][] | undefined,
|
||||
private readonly _capabilities: ITerminalCapabilityStore,
|
||||
@ITerminalQuickFixService private readonly _quickFixService: ITerminalQuickFixService,
|
||||
@ICommandService private readonly _commandService: ICommandService,
|
||||
@IConfigurationService private readonly _configurationService: IConfigurationService,
|
||||
@IAudioCueService private readonly _audioCueService: IAudioCueService,
|
||||
@IOpenerService private readonly _openerService: IOpenerService,
|
||||
@@ -192,7 +194,7 @@ export class TerminalQuickFixAddon extends Disposable implements ITerminalAddon,
|
||||
await this._extensionService.activateByEvent(`onTerminalQuickFixRequest:${id}`);
|
||||
return this._quickFixService.providers.get(id)?.provideTerminalQuickFixes(command, lines, { type: 'resolved', commandLineMatcher: selector.commandLineMatcher, outputMatcher: selector.outputMatcher, commandExitResult: selector.commandExitResult, id: selector.id }, new CancellationTokenSource().token);
|
||||
};
|
||||
const result = await getQuickFixesForCommand(aliases, terminal, command, this._commandListeners, this._openerService, this._labelService, this._onDidRequestRerunCommand, resolver);
|
||||
const result = await getQuickFixesForCommand(aliases, terminal, command, this._commandListeners, this._commandService, this._openerService, this._labelService, this._onDidRequestRerunCommand, resolver);
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
@@ -293,6 +295,7 @@ export async function getQuickFixesForCommand(
|
||||
terminal: Terminal,
|
||||
terminalCommand: ITerminalCommand,
|
||||
quickFixOptions: Map<string, ITerminalQuickFixOptions[]>,
|
||||
commandService: ICommandService,
|
||||
openerService: IOpenerService,
|
||||
labelService: ILabelService,
|
||||
onDidRequestRerunCommand?: Emitter<{ command: string; addNewLine?: boolean }>,
|
||||
@@ -339,15 +342,15 @@ export async function getQuickFixesForCommand(
|
||||
let action: ITerminalAction | undefined;
|
||||
if ('type' in quickFix) {
|
||||
switch (quickFix.type) {
|
||||
case TerminalQuickFixType.Command: {
|
||||
const fix = quickFix as ITerminalQuickFixCommandAction;
|
||||
case TerminalQuickFixType.TerminalCommand: {
|
||||
const fix = quickFix as ITerminalQuickFixExecuteTerminalCommandAction;
|
||||
if (commandQuickFixSet.has(fix.terminalCommand)) {
|
||||
continue;
|
||||
}
|
||||
commandQuickFixSet.add(fix.terminalCommand);
|
||||
const label = localize('quickFix.command', 'Run: {0}', fix.terminalCommand);
|
||||
action = {
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
class: undefined,
|
||||
source: quickFix.source,
|
||||
id: quickFix.id,
|
||||
@@ -405,6 +408,20 @@ export async function getQuickFixesForCommand(
|
||||
};
|
||||
break;
|
||||
}
|
||||
case TerminalQuickFixType.VscodeCommand: {
|
||||
const fix = quickFix as ITerminalQuickFixCommandAction;
|
||||
action = {
|
||||
source: quickFix.source,
|
||||
type: fix.type,
|
||||
id: fix.id,
|
||||
label: fix.title,
|
||||
class: undefined,
|
||||
enabled: true,
|
||||
run: () => commandService.executeCommand(fix.id),
|
||||
tooltip: fix.title
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (action) {
|
||||
fixes.push(action);
|
||||
@@ -477,9 +494,11 @@ function getQuickFixIcon(quickFix: TerminalQuickFixItem): ThemeIcon {
|
||||
const isUrl = (quickFix.action.uri.scheme === Schemas.http || quickFix.action.uri.scheme === Schemas.https);
|
||||
return isUrl ? Codicon.linkExternal : Codicon.goToFile;
|
||||
}
|
||||
case TerminalQuickFixType.Command:
|
||||
case TerminalQuickFixType.TerminalCommand:
|
||||
return Codicon.run;
|
||||
case TerminalQuickFixType.Port:
|
||||
return Codicon.debugDisconnect;
|
||||
case TerminalQuickFixType.VscodeCommand:
|
||||
return Codicon.lightbulb;
|
||||
}
|
||||
}
|
||||
|
||||
+9
-9
@@ -6,7 +6,7 @@
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { localize } from 'vs/nls';
|
||||
import { ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { ITerminalQuickFixInternalOptions, ITerminalCommandMatchResult, ITerminalQuickFixCommandAction, TerminalQuickFixActionInternal, TerminalQuickFixType } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
import { ITerminalQuickFixInternalOptions, ITerminalCommandMatchResult, ITerminalQuickFixExecuteTerminalCommandAction, TerminalQuickFixActionInternal, TerminalQuickFixType } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
|
||||
export const GitCommandLineRegex = /git/;
|
||||
export const GitPushCommandLineRegex = /git\s+push/;
|
||||
@@ -49,7 +49,7 @@ export function gitSimilar(): ITerminalQuickFixInternalOptions {
|
||||
if (fixedCommand) {
|
||||
actions.push({
|
||||
id: 'Git Similar',
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
terminalCommand: matchResult.commandLine.replace(/git\s+[^\s]+/, () => `git ${fixedCommand}`),
|
||||
addNewLine: true,
|
||||
source: QuickFixSource.Builtin
|
||||
@@ -79,7 +79,7 @@ export function gitTwoDashes(): ITerminalQuickFixInternalOptions {
|
||||
return;
|
||||
}
|
||||
return {
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
id: 'Git Two Dashes',
|
||||
terminalCommand: matchResult.commandLine.replace(` -${problemArg}`, () => ` --${problemArg}`),
|
||||
addNewLine: true,
|
||||
@@ -175,7 +175,7 @@ export function gitPushSetUpstream(): ITerminalQuickFixInternalOptions {
|
||||
}
|
||||
if (fixedCommand) {
|
||||
actions.push({
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
id: 'Git Push Set Upstream',
|
||||
terminalCommand: fixedCommand,
|
||||
addNewLine: true,
|
||||
@@ -268,11 +268,11 @@ export function pwshGeneralError(): ITerminalQuickFixInternalOptions {
|
||||
if (!suggestions) {
|
||||
return;
|
||||
}
|
||||
const result: ITerminalQuickFixCommandAction[] = [];
|
||||
const result: ITerminalQuickFixExecuteTerminalCommandAction[] = [];
|
||||
for (const suggestion of suggestions) {
|
||||
result.push({
|
||||
id: 'Pwsh General Error',
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
terminalCommand: suggestion,
|
||||
source: QuickFixSource.Builtin
|
||||
});
|
||||
@@ -314,7 +314,7 @@ export function pwshUnixCommandNotFoundError(): ITerminalQuickFixInternalOptions
|
||||
}
|
||||
|
||||
// Always remove the first element as it's the "Suggestion [cmd-not-found]"" line
|
||||
const result: ITerminalQuickFixCommandAction[] = [];
|
||||
const result: ITerminalQuickFixExecuteTerminalCommandAction[] = [];
|
||||
let inSuggestions = false;
|
||||
for (; i < lines.length; i++) {
|
||||
const line = lines[i].trim();
|
||||
@@ -325,7 +325,7 @@ export function pwshUnixCommandNotFoundError(): ITerminalQuickFixInternalOptions
|
||||
if (installCommand) {
|
||||
result.push({
|
||||
id: 'Pwsh Unix Command Not Found Error',
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
terminalCommand: installCommand,
|
||||
source: QuickFixSource.Builtin
|
||||
});
|
||||
@@ -339,7 +339,7 @@ export function pwshUnixCommandNotFoundError(): ITerminalQuickFixInternalOptions
|
||||
if (inSuggestions) {
|
||||
result.push({
|
||||
id: 'Pwsh Unix Command Not Found Error',
|
||||
type: TerminalQuickFixType.Command,
|
||||
type: TerminalQuickFixType.TerminalCommand,
|
||||
terminalCommand: line.trim(),
|
||||
source: QuickFixSource.Builtin
|
||||
});
|
||||
|
||||
+32
-29
@@ -30,11 +30,13 @@ import { TestStorageService } from 'vs/workbench/test/common/workbenchTestServic
|
||||
import { ITerminalQuickFixService } from 'vs/workbench/contrib/terminalContrib/quickFix/browser/quickFix';
|
||||
import { ITerminalOutputMatcher } from 'vs/platform/terminal/common/terminal';
|
||||
import { importAMDNodeModule } from 'vs/amdX';
|
||||
import { TestCommandService } from 'vs/editor/test/browser/editorTestServices';
|
||||
|
||||
suite('QuickFixAddon', () => {
|
||||
let quickFixAddon: TerminalQuickFixAddon;
|
||||
let terminalInstance: Pick<ITerminalInstance, 'freePortKillProcess'>;
|
||||
let commandDetection: CommandDetectionCapability;
|
||||
let commandService: TestCommandService;
|
||||
let openerService: OpenerService;
|
||||
let labelService: LabelService;
|
||||
let terminal: Terminal;
|
||||
@@ -62,6 +64,7 @@ suite('QuickFixAddon', () => {
|
||||
capabilities.add(TerminalCapability.CommandDetection, commandDetection);
|
||||
instantiationService.stub(IContextMenuService, instantiationService.createInstance(ContextMenuService));
|
||||
instantiationService.stub(IOpenerService, {} as Partial<IOpenerService>);
|
||||
commandService = new TestCommandService(instantiationService);
|
||||
terminalInstance = {
|
||||
async freePortKillProcess(port: string): Promise<void> { }
|
||||
} as Pick<ITerminalInstance, 'freePortKillProcess'>;
|
||||
@@ -96,23 +99,23 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual(await (getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitSimilarOutputRegex, exitCode, [`invalid output`]), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual(await (getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitSimilarOutputRegex, exitCode, [`invalid output`]), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('command does not match', async () => {
|
||||
strictEqual(await (getQuickFixesForCommand([], terminal, createCommand(`gt sttatus`, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual(await (getQuickFixesForCommand([], terminal, createCommand(`gt sttatus`, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
suite('returns actions when', () => {
|
||||
test('expected unix exit code', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
test('matching exit status', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, 2, outputLines), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, 2, outputLines), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
suite('returns match', () => {
|
||||
test('returns match', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitSimilarOutputRegex, exitCode, outputLines), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
|
||||
test('returns multiple match', async () => {
|
||||
@@ -133,13 +136,13 @@ suite('QuickFixAddon', () => {
|
||||
tooltip: 'Run: git push',
|
||||
command: 'git push'
|
||||
}];
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand('git pu', output, GitSimilarOutputRegex, exitCode, output.split('\n')), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand('git pu', output, GitSimilarOutputRegex, exitCode, output.split('\n')), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
test('passes any arguments through', async () => {
|
||||
output = `git: 'checkoutt' is not a git command. See 'git --help'.
|
||||
The most similar commands are
|
||||
checkout`;
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand('git checkoutt .', output, GitSimilarOutputRegex, exitCode, output.split('\n')), expectedMap, openerService, labelService)), [{
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand('git checkoutt .', output, GitSimilarOutputRegex, exitCode, output.split('\n')), expectedMap, commandService, openerService, labelService)), [{
|
||||
id: 'Git Similar',
|
||||
enabled: true,
|
||||
label: 'Run: git checkout .',
|
||||
@@ -168,18 +171,18 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitTwoDashesRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitTwoDashesRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('command does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`gt sttatus`, output, GitTwoDashesRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`gt sttatus`, output, GitTwoDashesRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
suite('returns actions when', () => {
|
||||
test('expected unix exit code', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitTwoDashesRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitTwoDashesRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
test('matching exit status', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitTwoDashesRegex, 2), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitTwoDashesRegex, 2), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -215,11 +218,11 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(portCommand, `invalid output`, FreePortOutputRegex), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(portCommand, `invalid output`, FreePortOutputRegex), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
test('returns actions', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(portCommand, output, FreePortOutputRegex), expectedMap, openerService, labelService)), actionOptions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(portCommand, output, FreePortOutputRegex), expectedMap, commandService, openerService, labelService)), actionOptions);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -246,18 +249,18 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('command does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
suite('returns actions when', () => {
|
||||
test('expected unix exit code', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
test('matching exit status', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, 2), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, 2), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -287,18 +290,18 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitCreatePrOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitCreatePrOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('command does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitCreatePrOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitCreatePrOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('failure exit status', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitCreatePrOutputRegex, 2), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitCreatePrOutputRegex, 2), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
suite('returns actions when', () => {
|
||||
test('expected unix exit code', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitCreatePrOutputRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitCreatePrOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -326,18 +329,18 @@ suite('QuickFixAddon', () => {
|
||||
});
|
||||
suite('returns undefined when', () => {
|
||||
test('output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('command does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(`git status`, output, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
});
|
||||
suite('returns actions when', () => {
|
||||
test('expected unix exit code', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
test('matching exit status', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, 2), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, GitPushOutputRegex, 2), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -386,10 +389,10 @@ suite('QuickFixAddon', () => {
|
||||
expectedMap.set(pushCommand.commandLineMatcher.toString(), [pushCommand]);
|
||||
});
|
||||
test('returns undefined when output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, PwshGeneralErrorOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, PwshGeneralErrorOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('returns actions when output matches', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, PwshGeneralErrorOutputRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, PwshGeneralErrorOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
suite('Unix cmd-not-found', () => {
|
||||
@@ -430,10 +433,10 @@ suite('QuickFixAddon', () => {
|
||||
expectedMap.set(pushCommand.commandLineMatcher.toString(), [pushCommand]);
|
||||
});
|
||||
test('returns undefined when output does not match', async () => {
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, PwshUnixCommandNotFoundErrorOutputRegex, exitCode), expectedMap, openerService, labelService)), undefined);
|
||||
strictEqual((await getQuickFixesForCommand([], terminal, createCommand(command, `invalid output`, PwshUnixCommandNotFoundErrorOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), undefined);
|
||||
});
|
||||
test('returns actions when output matches', async () => {
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, PwshUnixCommandNotFoundErrorOutputRegex, exitCode), expectedMap, openerService, labelService)), actions);
|
||||
assertMatchOptions((await getQuickFixesForCommand([], terminal, createCommand(command, output, PwshUnixCommandNotFoundErrorOutputRegex, exitCode), expectedMap, commandService, openerService, labelService)), actions);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -80,9 +80,4 @@ declare module 'vscode' {
|
||||
Top = 0,
|
||||
Bottom = 1
|
||||
}
|
||||
|
||||
enum TerminalQuickFixType {
|
||||
Command = 0,
|
||||
Opener = 1
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user