mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
Introduce task.define for more precise task naming
This commit is contained in:
parent
79345ff97a
commit
bb6a790711
|
@ -101,21 +101,18 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||
|
||||
const srcOpts = { cwd: path.dirname(__dirname), base: srcBase };
|
||||
|
||||
const cleanTask = util.rimraf(out);
|
||||
cleanTask.displayName = `clean-extension-${name}`;
|
||||
const cleanTask = task.define(`clean-extension-${name}`, util.rimraf(out));
|
||||
|
||||
const compileTask_ = () => {
|
||||
const compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {
|
||||
const pipeline = createPipeline(false, true);
|
||||
const input = gulp.src(src, srcOpts);
|
||||
|
||||
return input
|
||||
.pipe(pipeline())
|
||||
.pipe(gulp.dest(out));
|
||||
};
|
||||
compileTask_.displayName = `compile-extension-${name}`;
|
||||
const compileTask = task.series(cleanTask, compileTask_);
|
||||
}));
|
||||
|
||||
const watchTask_ = () => {
|
||||
const watchTask = task.define(`watch-extension:${name}`, task.series(cleanTask, () => {
|
||||
const pipeline = createPipeline(false);
|
||||
const input = gulp.src(src, srcOpts);
|
||||
const watchInput = watcher(src, srcOpts);
|
||||
|
@ -123,24 +120,20 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||
return watchInput
|
||||
.pipe(util.incremental(pipeline, input))
|
||||
.pipe(gulp.dest(out));
|
||||
};
|
||||
watchTask_.displayName = `watch-extension-${name}`;
|
||||
const watchTask = task.series(cleanTask, watchTask_);
|
||||
}));
|
||||
|
||||
const compileBuildTask_ = () => {
|
||||
const compileBuildTask = task.define(`compile-build-extension-${name}`, task.series(cleanTask, () => {
|
||||
const pipeline = createPipeline(true, true);
|
||||
const input = gulp.src(src, srcOpts);
|
||||
|
||||
return input
|
||||
.pipe(pipeline())
|
||||
.pipe(gulp.dest(out));
|
||||
};
|
||||
compileBuildTask_.displayName = `compile-build-extension-${name}`;
|
||||
const compileBuildTask = task.series(cleanTask, compileBuildTask_);
|
||||
}));
|
||||
|
||||
// Tasks
|
||||
gulp.task('compile-extension:' + name, compileTask);
|
||||
gulp.task('watch-extension:' + name, watchTask);
|
||||
gulp.task(compileTask);
|
||||
gulp.task(watchTask);
|
||||
|
||||
return {
|
||||
compileTask: compileTask,
|
||||
|
@ -149,16 +142,13 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||
};
|
||||
});
|
||||
|
||||
const compileExtensionsTask = task.parallel(...tasks.map(t => t.compileTask));
|
||||
compileExtensionsTask.displayName = 'compile-extensions';
|
||||
gulp.task(compileExtensionsTask.displayName, compileExtensionsTask);
|
||||
const compileExtensionsTask = task.define('compile-extensions', task.parallel(...tasks.map(t => t.compileTask)));
|
||||
gulp.task(compileExtensionsTask);
|
||||
exports.compileExtensionsTask = compileExtensionsTask;
|
||||
|
||||
const watchExtensionsTask = task.parallel(...tasks.map(t => t.watchTask));
|
||||
watchExtensionsTask.displayName = 'watch-extensions';
|
||||
gulp.task(watchExtensionsTask.displayName, watchExtensionsTask);
|
||||
const watchExtensionsTask = task.define('watch-extensions', task.parallel(...tasks.map(t => t.watchTask)));
|
||||
gulp.task(watchExtensionsTask);
|
||||
exports.watchExtensionsTask = watchExtensionsTask;
|
||||
|
||||
const compileExtensionsBuildTask = task.parallel(...tasks.map(t => t.compileBuildTask));
|
||||
compileExtensionsBuildTask.displayName = 'compile-extensions-build';
|
||||
const compileExtensionsBuildTask = task.define('compile-extensions-build', task.parallel(...tasks.map(t => t.compileBuildTask)));
|
||||
exports.compileExtensionsBuildTask = compileExtensionsBuildTask;
|
||||
|
|
|
@ -24,14 +24,19 @@ function _renderTime(time) {
|
|||
seconds -= minutes * 60;
|
||||
return `${minutes} m and ${seconds} s`;
|
||||
}
|
||||
const DONT_SHOW_PLEASE = `DONT_SHOW_PLEASE`;
|
||||
async function _execute(task) {
|
||||
const name = task.displayName || task.name || `<anonymous>`;
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
const name = task.taskName || task.displayName || `<anonymous>`;
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
}
|
||||
const startTime = process.hrtime();
|
||||
await _doExecute(task);
|
||||
const elapsedArr = process.hrtime(startTime);
|
||||
const elapsedNanoseconds = (elapsedArr[0] * 1e9 + elapsedArr[1]);
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
}
|
||||
}
|
||||
async function _doExecute(task) {
|
||||
// Always invoke as if it were a callback task
|
||||
|
@ -63,16 +68,40 @@ async function _doExecute(task) {
|
|||
});
|
||||
}
|
||||
function series(...tasks) {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
for (let i = 0; i < tasks.length; i++) {
|
||||
await _execute(tasks[i]);
|
||||
}
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
exports.series = series;
|
||||
function parallel(...tasks) {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
await Promise.all(tasks.map(t => _execute(t)));
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
exports.parallel = parallel;
|
||||
function define(name, task) {
|
||||
if (task._tasks) {
|
||||
// This is a composite task
|
||||
const lastTask = task._tasks[task._tasks.length - 1];
|
||||
if (lastTask._tasks || lastTask.taskName) {
|
||||
// This is a composite task without a real task function
|
||||
// => generate a fake task function
|
||||
return define(name, series(task, () => Promise.resolve()));
|
||||
}
|
||||
lastTask.taskName = name;
|
||||
task.taskName = DONT_SHOW_PLEASE;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
||||
// This is a simple task
|
||||
task.taskName = name;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
||||
exports.define = define;
|
||||
|
|
|
@ -8,9 +8,21 @@
|
|||
import * as fancyLog from 'fancy-log';
|
||||
import * as ansiColors from 'ansi-colors';
|
||||
|
||||
export type PromiseTask = () => Promise<void>;
|
||||
export type StreamTask = () => NodeJS.ReadWriteStream;
|
||||
export type CallbackTask = (cb?: (err?: any) => void) => void;
|
||||
export interface BaseTask {
|
||||
displayName?: string;
|
||||
taskName?: string;
|
||||
_tasks?: Task[];
|
||||
}
|
||||
export interface PromiseTask extends BaseTask {
|
||||
(): Promise<void>;
|
||||
}
|
||||
export interface StreamTask extends BaseTask {
|
||||
(): NodeJS.ReadWriteStream;
|
||||
}
|
||||
export interface CallbackTask extends BaseTask {
|
||||
(cb?: (err?: any) => void): void;
|
||||
}
|
||||
|
||||
export type Task = PromiseTask | StreamTask | CallbackTask;
|
||||
|
||||
function _isPromise(p: Promise<void> | NodeJS.ReadWriteStream): p is Promise<void> {
|
||||
|
@ -33,14 +45,20 @@ function _renderTime(time: number): string {
|
|||
return `${minutes} m and ${seconds} s`;
|
||||
}
|
||||
|
||||
const DONT_SHOW_PLEASE = `DONT_SHOW_PLEASE`;
|
||||
|
||||
async function _execute(task: Task): Promise<void> {
|
||||
const name = (<any>task).displayName || task.name || `<anonymous>`;
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
const name = task.taskName || task.displayName || `<anonymous>`;
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
}
|
||||
const startTime = process.hrtime();
|
||||
await _doExecute(task);
|
||||
const elapsedArr = process.hrtime(startTime);
|
||||
const elapsedNanoseconds = (elapsedArr[0] * 1e9 + elapsedArr[1]);
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
}
|
||||
}
|
||||
|
||||
async function _doExecute(task: Task): Promise<void> {
|
||||
|
@ -78,15 +96,42 @@ async function _doExecute(task: Task): Promise<void> {
|
|||
}
|
||||
|
||||
export function series(...tasks: Task[]): PromiseTask {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
for (let i = 0; i < tasks.length; i++) {
|
||||
await _execute(tasks[i]);
|
||||
}
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
|
||||
export function parallel(...tasks: Task[]): PromiseTask {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
await Promise.all(tasks.map(t => _execute(t)));
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
|
||||
export function define(name: string, task: Task): Task {
|
||||
if (task._tasks) {
|
||||
// This is a composite task
|
||||
const lastTask = task._tasks[task._tasks.length - 1];
|
||||
|
||||
if (lastTask._tasks || lastTask.taskName) {
|
||||
// This is a composite task without a real task function
|
||||
// => generate a fake task function
|
||||
return define(name, series(task, () => Promise.resolve()));
|
||||
}
|
||||
|
||||
lastTask.taskName = name;
|
||||
task.taskName = DONT_SHOW_PLEASE;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
||||
|
||||
// This is a simple task
|
||||
task.taskName = name;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
Loading…
Reference in a new issue