Плагин предназначен для автоматического формирования документации для javascript — файлов.
Документирование происходит при помощи синтаксиса JSDoc
Установка плагина
Устанавливаем jsdoc, если он еще не установлен. Для проверки наличия jsdoc можно выполнить следующую команду:
jsdoc -v
Для сборки проекта устанавливаем пакет vsce
npm install -g vsce
Далее собираем проект
git clone git://git.appcode.pw/docdash-plugin.git npm install vsce package
Инструкция по установке .vsix пакета тут
Внимание!!! Для корректной работа плагина требуется наличие утилиты jsdoc
npm install -g jsdoc
Основные задачи плагина:
- чтение разметки jsdoc
 - передача разметки на сервер
 - возможность просмотра документации
 
Формирование документации для javascript файлов
Оформление полей
Пример простого поля:
/**
 * оформления простого поля
 * @type {string}
 * @default 'simple'
 * @todo Примечание к полю
 * @example
 * var obj = new Simple();
 * alert(obj.simple);
 */
simple: ''

Пример сложного поля:
/**
 * Настройки панели
 */
config: {
    /**
     * Наименование
     * @type {number|string}
     * @default 0
     */
    name: null
}
Оформление функций
Функции для документирования бывают:
- публичные
 - приватные — применяется только для проектов extjs
 - статичные — применяется только для проектов extjs
 - переопределенные — применяется только для проектов extjs
 
Пример оформления публичной функции в extjs
/**
 * Test method
 * @todo потом может быть удален
 * @param {number} i номер
 * @param {number|string} val значение
 * @returns {string}
 */
start: function (i, val) {
    var v = {
        /**
         * пример
         */
        config: ''
    };
    alert(v);
    return '';
}
Пример оформления в nodejs
/**
 * вывод уведомления
 * @param {string} msg текст уведомления
 */
exports.info = function (msg) {
    vscode.window.showInformationMessage(msg);
}
Приватная функция в extjs упаковывается в объект privates.
Пример приватной функции в extjs
privates: {
    /**
     * остановка
     */
    stop: function () {
        /**
         * следующий
         */
        function next() {
        }
        next();
        /**
         * событие остановки
         * @event stop
         * @property {any} sender текущий объект 
         * @property {string} type Indicates whether the snowball is tightly packed.
         * @returns {boolean}
         */
        this.fireEvent('stop', this, '');
    }
}
Статическая функция в extjs упаковывается в объект statics.
statics: {
    /**
     * Запуск
     */
    run: function () {}
}
Переопределенная функция отмечается атрибутом @override
/**
 * отрисовка
 * @override
 */
onRender: function () {
    this.callParent(arguments)
}
Пример вывода функций в документации.

Оформление событий
Пример оформления события указан для extjs файла, но для других проектов применение аналогично.
/**
 * событие остановки
 * @event stop
 * @property {any} sender текущий объект 
 * @property {string} type Indicates whether the snowball is tightly packed.
 * @returns {boolean}
 */
this.fireEvent('stop', this, '');
Оформление событий происходит в момент их вызова и помечается атрибутом @event Передаваемые параметры указываются через атрибут @property
Оформление класса
Данный тип оформления применяется только для extjs файлов
/**
 * Вспомогательный класс
 * @class Test.Index
 * @example 
 * Test.Index.start();
 * var v = '';
 */
Ext.define('Test.Index', {
    extend: 'Ext.Panel',
...
Для указания документации, что элемент является классом, нужно добавить атрибут @class

«Шапка» приложения
Для идентификации файла в системе применяется дополнительный синтаксис, который указывается в самом начале файла
/** * @file /api/script-file * @project Test * @author Aleksandr * @todo простоя javascript файл */
, где
- file — путь к файлу относительно корневого каталога
 - project — имя проекта
 - author — автор
 - todo — примечание к файлу
 

Примеры оформления
Автоматическая генерация документации поддерживает два типа файлов:
- простой файл js
 - объект extjs
 
Пример оформления простого файла:
/**
 * @file api/script-file
 * @project Test
 */
/**
 * Описание
 * @return {any}
 */
function Test() {
    var v = '';
    function start() {}
    this.start = start;
    return this;
}
Пример оформления ExtJS:
/**
 * @todo Hello
 * @file script-file.js
 * @project test
 */
/**
 * Вспомогательный класс
 * @class Test.Index
 * @example 
 * Test.Index.start();
 * var v = '';
 */
Ext.define('Test.Index', {
    extend: 'Ext.Panel',
    singleton: true,
    alternateClassName: ['Index'],
    xtype: 'index',
    mixins: ['Base'],
    requires: ['User'],
    alias: 'widget.index',
    /**
     * Настройки панели
     */
    config: {
        /**
         * Наименование
         * @type {number|string}
         * @default 0
         */
        name: null
    },
    /**
     * Test method
     * @todo потом может быть удален
     * @param {number} i номер
     * @param {number|string} val значение
     * @returns {string}
     */
    start: function (i, val) {
        var v = {
            /**
             * пример
             */
            config: ''
        };
        alert(v);
        return '';
    },
    /**
     * отрисовка
     * @override
     */
    onRender: function () {
        this.callParent(arguments)
    },
    privates: {
        /**
         * остановка
         */
        stop: function () {
            /**
             * следующий
             */
            function next() {
            }
            next();
            /**
             * событие остановки
             * @event stop
             * @property {any} sender текущий объект 
             * @property {string} type Indicates whether the snowball is tightly packed.
             * @returns {boolean}
             */
            this.fireEvent('stop', this, '');
        }
    },
    statics: {
        /**
         * Запуск
         */
        run: function () {}
    }
});
Оформление package.json
Данные для документирования так же берутся с файла package.json
Список полей:
- name: string — имя проекта
 - description: string — описание
 - author: string — автор
 - version: string — версия приложения
 - repository: any — объект хранения
 
Пример оформления:
{
    "name": "my-jsdoc",
    "version": "1.0.0",
    "description": "Пакет генерации json-документации из js-файла",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "Aleksandr Krasnov",
    "license": "ISC",
    "dependencies": {
        "md5": "^2.2.1"
    },
    "repository": {
        "type": "git",
        "url": "git://git.appcode.pw/my-jsdoc.git"
    }
}

Создание руководства
Для создания руководства нужно создать файл readme.md
Рекомендации по созданию файла:
- 
- создавать файл в формате Markdown
 - не указывать заголовки выше ### (смотреться будет некрасиво)
 
 
Например:
### Описание Плагин для VSCode, который позволяет создавать тестирование для nodejs файлов и затем автоматически их выполнять с выводом отчетов Более подробную документацию смотреть на сайте [appcode.pw](http://www.appcode.pw/?p=615)
Создание инструкции по установке
Для создания инструкции требуется в корневом каталоге создать файл install.md и в нем расписать все шаги
Пример:
Устанавливаем генератор пакетов ``` npm install -g vsce ``` Скачиваем проект с сервера и генерируем файл ``` git clone git://git.appcode.pw/autotest-plugin.git npm install vsce package ``` Установить файл с расширением [*.vsix](https://code.visualstudio.com/docs/editor/extension-gallery#_install-from-a-vsix)
Пример вывода

Дополнительные ссылки:
Описание модуля
В любой папке можно создать файл readmemodule.md написать в нем описание этого модуля.


	

