30 мая 2014 г.

Как MSBuild.Exec определяет ошибки при запуске third-party tools

При подготовке дистрибутива почти любого проекта возникает необходимость выполнить в качестве одного из этапов сборки произвольную программу (минификатор скриптов, архиватор, создание инсталлятора и т.п.), и желательно, чтобы при ошибках в её выполнении сборка останавливалась.

Как это реализовано в MSBuild: Exec Task - Runs the specified program or command by using the specified arguments.

У Exec есть одна особенность, о которой в документации прямо не упомянуто: "умное" определение ошибок выполнения. Если выполненная программа завершилась с ненулевым кодом, то Exec считает это ошибкой, но если программа завершилась с нулевым кодом, то Exec дополнительно сканирует её вывод (stdout, stderr) на наличие ключевых слов.

12 мая 2014 г.

Generics in JSDoc

/**
 * @interface
 * @template T
 */
MyEnumerable = function () { };

/**
 * @param {T} item
 */
MyEnumerable.prototype.add = function (item) { };

/**
 * @constructor
 * @template TItemType
 * @extends {MyEnumerable.<TItemType>}
 */
MyList = function () { };

/**
 * @param {TItemType} item the item
 */
MyList.prototype.addItem = function (item) { };

/** @type {MyEnumerable.<string>}*/
var enumerable = new MyList();
enumerable.add("Bob"); // correct
enumerable.add(123); // correct warning: number is not assignable to type string 

/** @type {MyList.<string>}*/
var list = new MyList();
list.add("Bob"); // incorrect warning: number is not assignable to type TITemType 
list.addItem("Bob"); // correct

Now works in WebStorm