mirror of
https://github.com/Microsoft/vscode
synced 2024-10-06 03:17:00 +00:00
parent
f826e82591
commit
6a9c6c2ff9
|
@ -105,23 +105,21 @@ function isTestTask(name: string): boolean {
|
|||
return false;
|
||||
}
|
||||
|
||||
function getPrePostScripts(scripts: any): Set<string> {
|
||||
function isPrePostScript(name: string): boolean {
|
||||
const prePostScripts: Set<string> = new Set([
|
||||
'preuninstall', 'postuninstall', 'prepack', 'postpack', 'preinstall', 'postinstall',
|
||||
'prepack', 'postpack', 'prepublish', 'postpublish', 'preversion', 'postversion',
|
||||
'prestop', 'poststop', 'prerestart', 'postrestart', 'preshrinkwrap', 'postshrinkwrap',
|
||||
'pretest', 'postest', 'prepublishOnly'
|
||||
]);
|
||||
let keys = Object.keys(scripts);
|
||||
for (const script of keys) {
|
||||
const prepost = ['pre' + script, 'post' + script];
|
||||
prepost.forEach(each => {
|
||||
if (scripts[each] !== undefined) {
|
||||
prePostScripts.add(each);
|
||||
}
|
||||
});
|
||||
|
||||
const prepost = ['pre' + name, 'post' + name];
|
||||
for (const knownScript of prePostScripts) {
|
||||
if (knownScript === prepost[0] || knownScript === prepost[1]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return prePostScripts;
|
||||
return false;
|
||||
}
|
||||
|
||||
export function isWorkspaceFolder(value: any): value is WorkspaceFolder {
|
||||
|
@ -277,26 +275,10 @@ async function provideNpmScriptsForFolder(context: ExtensionContext, packageJson
|
|||
|
||||
const result: TaskWithLocation[] = [];
|
||||
|
||||
const prePostScripts = getPrePostScripts(scripts);
|
||||
const packageManager = await getPackageManager(context, folder.uri, showWarning);
|
||||
|
||||
for (const { name, value, nameRange } of scripts.scripts) {
|
||||
const task = await createTask(packageManager, name, ['run', name], folder!, packageJsonUri, value);
|
||||
const lowerCaseTaskName = name.toLowerCase();
|
||||
if (isBuildTask(lowerCaseTaskName)) {
|
||||
task.group = TaskGroup.Build;
|
||||
} else if (isTestTask(lowerCaseTaskName)) {
|
||||
task.group = TaskGroup.Test;
|
||||
}
|
||||
if (prePostScripts.has(name)) {
|
||||
task.group = TaskGroup.Clean; // hack: use Clean group to tag pre/post scripts
|
||||
}
|
||||
|
||||
// todo@connor4312: all scripts are now debuggable, what is a 'debug script'?
|
||||
if (isDebugScript(value)) {
|
||||
task.group = TaskGroup.Rebuild; // hack: use Rebuild group to tag debug scripts
|
||||
}
|
||||
|
||||
const task = await createTask(packageManager, name, ['run', name], folder!, packageJsonUri, value, undefined);
|
||||
result.push({ task, location: new Location(packageJsonUri, nameRange) });
|
||||
}
|
||||
|
||||
|
@ -312,7 +294,7 @@ export function getTaskName(script: string, relativePath: string | undefined) {
|
|||
return script;
|
||||
}
|
||||
|
||||
export async function createTask(packageManager: string, script: NpmTaskDefinition | string, cmd: string[], folder: WorkspaceFolder, packageJsonUri: Uri, detail?: string, matcher?: any): Promise<Task> {
|
||||
export async function createTask(packageManager: string, script: NpmTaskDefinition | string, cmd: string[], folder: WorkspaceFolder, packageJsonUri: Uri, scriptValue?: string, matcher?: any): Promise<Task> {
|
||||
let kind: NpmTaskDefinition;
|
||||
if (typeof script === 'string') {
|
||||
kind = { type: 'npm', script: script };
|
||||
|
@ -348,7 +330,19 @@ export async function createTask(packageManager: string, script: NpmTaskDefiniti
|
|||
let taskName = getTaskName(kind.script, relativePackageJson);
|
||||
let cwd = path.dirname(packageJsonUri.fsPath);
|
||||
const task = new Task(kind, folder, taskName, 'npm', new ShellExecution(packageManager, getCommandLine(cmd), { cwd: cwd }), matcher);
|
||||
task.detail = detail;
|
||||
task.detail = scriptValue;
|
||||
|
||||
const lowerCaseTaskName = kind.script.toLowerCase();
|
||||
if (isBuildTask(lowerCaseTaskName)) {
|
||||
task.group = TaskGroup.Build;
|
||||
} else if (isTestTask(lowerCaseTaskName)) {
|
||||
task.group = TaskGroup.Test;
|
||||
} else if (isPrePostScript(lowerCaseTaskName)) {
|
||||
task.group = TaskGroup.Clean; // hack: use Clean group to tag pre/post scripts
|
||||
} else if (scriptValue && isDebugScript(scriptValue)) {
|
||||
// todo@connor4312: all scripts are now debuggable, what is a 'debug script'?
|
||||
task.group = TaskGroup.Rebuild; // hack: use Rebuild group to tag debug scripts
|
||||
}
|
||||
return task;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue