Как да документирам изходния код на 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)


Не бих посъветвал това. JSDoc-ирането на целия ви код е трудоемък процес, който вероятно ще доведе до малка или никаква полза от Closure Compiler. Извън самия Google едва ли някой прави това. CoffeeScripters/JavaScripters обикновено предпочитат леки инструменти за документиране като 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

Въвеждане на CoffeeScript:

### 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 cmd подкана за: 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
JSDoc-ирането на целия ви код е трудоемък процес, който вероятно ще доведе до малка или никаква полза от Closure Compiler Цитат от по-горе. Не мога да се съглася повече. И Pseudo-JSDoc-ing CoffeeScript код, надявайки се, че полученият изход в крайна сметка ще пасне на валиден JSDoc формат, почти не носи никаква полза. Може да работи добре с известно издание. Но май просто не си струва усилието. - person Lukas Bünger; 29.11.2013
comment
@BillyMoon Не мога да го накарам да работи с методи на клас в CoffeeScript. - person boh; 17.09.2014

Тъй като не мога да отговоря директно на Billy по-горе, изглежда, че 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

Ще трябва да експериментирате (много), но ### коментарите са ваш приятел.

Компилаторът на скрипт за кафе ще запази коментари, които използват формата ### (документи тук).

Опитах се да създам наистина прост JsDoc фрагмент за функция, използвайки функцията 'try 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