Как документировать исходный код CoffeeScript с помощью JSDoc?

У меня есть код, написанный на CoffeeScript, и я хочу оптимизировать сгенерированный JavaScript с помощью Google Closure Compiler, поэтому эти файлы необходимо документировать с помощью JSDoc.

Мой вопрос: как я могу документировать файлы *.coffee для создания javascript, содержащего рабочий JSDoc для компилятора закрытия?

Еще один вопрос: есть ли способ сохранить однострочный комментарий в *.coffee?


person aztack    schedule 20.10.2011    source источник
comment
Пожалуйста, выберите ответ, который отвечает на ваш вопрос: как я могу документировать файлы *.coffee для создания javascript, содержащего рабочий JSDoc для компилятора замыкания?   -  person Patrick McLaren    schedule 16.11.2017


Ответы (5)


Я бы посоветовал против этого. JSDocing всего вашего кода — это трудоемкий процесс, который, скорее всего, не принесет никакой пользы от Closure Compiler. Кроме самого Google этим практически никто не занимается. Сторонники CoffeeScript/JavaScript обычно предпочитают легкие инструменты документации, такие как docco.

Кроме того, несмотря на то, что за Closure Compiler стоит торговая марка Google, UglifyJS оказался более эффективной минификацией. инструмент во многих случаях. (jQuery недавно перешел на него.)

Еще один вопрос: есть ли способ сохранить однострочный комментарий в *.coffee?

Да:

### foo ###

or

`// foo`
person Trevor Burnham    schedule 20.10.2011
comment
// foo добавит ; в конце строки, есть ли способ удалить его? - person aztack; 24.10.2011
comment
При использовании в расширенном режиме компилятор закрытия Google обеспечивает непревзойденную скорость сжатия и выполнения. См. тесты на jsperf.com/testing-code-performance-by-compression-type. - person Aleš Kotnik; 17.02.2013
comment
У JSDoc есть много преимуществ, которые выходят за рамки оптимизации Closure Compiler и, возможно, более важны, чем создание великолепно выглядящей скомпилированной документации. Если вы используете JSDoc, хорошая IDE может кодировать и печатать подсказки, выдавать предупреждения/ошибки и делать @see/@link доступным для навигации. Учитывая, что корень бесчисленных ошибок заключается либо в отсутствии подписи, либо в ее несоблюдении, я бы сказал, что JSDoc важен в любом JS, минимизированном или нет (и есть некоторые IDE, такие как PHPStorm, которые с радостью переваривают его и в контексте CoffeeScript) . - person Ezekiel Victor; 30.04.2013
comment
Кроме того, чтобы не быть слишком противоречивым, но как docco вообще легковесная документация, как вы говорите? Для этого требуются сторонние компоненты, дополнительная конфигурация, еще одна процедура компиляции, добавленная к вашей процедуре сборки, и, что хуже всего, дополнительное внимание со стороны разработчика для создания красивых, больших раздутых комментариев, которые не работают в контексте исходного исходного кода (см. JSDoc аргументы выше). - person Ezekiel Victor; 30.04.2013
comment
Этот «ответ» игнорирует вопрос в пользу личного мнения. - person rath; 15.03.2014
comment
-1 Это вообще не ответ на вопрос. Прежде всего, вы, кажется, полностью упускаете суть jsDoc. Во-вторых, то, что docco является легковесным инструментом для документирования, надумано. - person losnir; 14.02.2016

Ввод кофескрипта:

### define function variable before block to avoid code being appended to closing part of JSDoc comment ###
cube = null

###*
 * Function to calculate cube of input
 * @param {number} Number to operate on
 * @return {number} Cube of input
 ###

cube = (x) -> x*x*x

Вывод JavaScript из командной строки Windows для: coffee -cpb src.coffee

// Generated by CoffeeScript 1.6.3
/* define function variable before block to avoid code being appended to closing part of JSDoc comment*/

var cube;

cube = null;

/**
 * Function to calculate cube of input
 * @param {number} Number to operate on
 * @return {number} Cube of input
*/

cube = function(x) {
  return x * x * x;
};

Редактировать

Как подробно описано в другом ответе, у CoffeeScript 1.7.1 есть лучший метод для решения этой проблемы.

person Billy Moon    schedule 06.02.2012
comment
примечание: компилятор Coffeescript добавляет пробелы после комментария, поэтому некоторые синтаксические анализаторы могут не распознать его как JSDoc, который, как я думаю (из опыта работы с другими инструментами документации), должен быть именно той строкой, которая предшествует началу определения метода. - person SirLenz0rlot; 26.02.2013
comment
Кажется, это больше не работает. В CoffeeScript 1.6.3 выходные данные JavaScript содержат var cube перед определением функции, что запрещает JSDoc 3.2.0 генерировать документацию для функции. - person rvernica; 17.07.2013
comment
Сказав это, я не пробовал JSDoc 3.2.0, так что на самом деле это может вообще не работать, поскольку целью моего метода является определение переменной перед блоком. - person Billy Moon; 17.07.2013
comment
JSDocing всего вашего кода — это трудоемкий процесс, который, скорее всего, не даст практически никакой пользы от приведенной выше цитаты компилятора закрытия. Я не мог не согласиться. И псевдо-JSDoc-код CoffeeScript, надеясь, что результирующий вывод в конечном итоге будет соответствовать допустимому формату JSDoc, почти не дает никакой пользы. Может работать нормально с некоторым релизом. Но май просто не стоит усилий. - person Lukas Bünger; 29.11.2013
comment
@BillyMoon Я не могу заставить его работать с методами класса в CoffeeScript. - person boh; 17.09.2014

Поскольку я не могу напрямую ответить Билли выше, кажется, что CoffeeScript 1.7.1 лучше поддерживает это:

###*
# Sets the language and redraws the UI.
# @param {object} data Object with `language` property
# @param {string} data.language Language code
###

handleLanguageSet: (data) ->

выходы

/**
 * Sets the language and redraws the UI.
 * @param {object} data Object with `language` property
 * @param {string} data.language Language code
 */
handleLanguageSet: function(data) {}
person mike wyatt    schedule 22.06.2014

Вам придется экспериментировать (много), но ### комментарии вам в помощь.

Компилятор coffee-script сохранит комментарии, использующие форму ### (документы здесь).

Я попытался создать действительно простой фрагмент JsDoc для функции, используя функцию «попробовать coffeescript» на сайте:

###* Doc for this function.###
foo = -> 'bar'

Это дало:

/** Doc for this function.
*/
var foo;
foo = function() {
   return 'bar';
 };

Я не эксперт в JsDoc, но я предполагаю, что оператор var foo; над функцией создаст проблему. Если вы уже объявили foo раньше, может быть..

Было бы неплохо услышать, как дела.

person Jacob Oscarson    schedule 20.10.2011

class есть проблема

###* this is a class ###
class hello
    v: 4

дает это

// Generated by CoffeeScript 2.0.0-beta5
/** this is a class */
var hello;

hello = (function() {
  class hello {};

  hello.prototype.v = 4;

  return hello;

})();

и это недействительно в JSDoc

person Li Hanyuan    schedule 08.09.2017