¿Cómo crear fácilmente markdown amigable Github para las funciones de JavaScript documentadas?


Quiero ser capaz de tomar comentarios JSDoc como este en cualquier lugar en código JavaScript (incluso anidado en varias capas de funciones, en un módulo o incluso funciones anónimas):

/**
 *  Used to do some important thing that needs doing that works like xyz.
 *  @param {String} whatever - some string that has some purpose
 *  @param {Function} callback - a function that needs to be run
 *  @returns {Boolean} whether or not something happened
 */
 function something(whatever, callback) {
     ...

Y tener alguna manera fácil de producir un buen markdown:

##`root.something(whatever,callback)`
Used to do some important thing that needs doing that works like xyz.

*Parameters*
  `whatever {String}` some string that has some purpose
  `callback {Function}` a function that needs to be run

*Returns*
   `{Boolean}` whether or not something happened

Donde "root" es el espacio de nombres en el que se puede acceder a esa función. O si es una función anónima o una función privada(que por alguna razón debería estar en doco público, ¿eso tiene sentido??), utilice algún otro convención para denotar eso. Tal vez

##_private_function_ `something(whatever,callback)`

  and

##_anonymous_function_`(whatever,callback)`

No tiene que ser exactamente ese formato, solo algo que se vea bien en Github y tenga sentido. La herramienta ideal sería lo suficientemente inteligente como para ser capaz de tomar código como Bigote.js y producir un buen rendimiento. Y extra bueno sería si puede manejar una gran cantidad de archivos de origen y producir un documento como salida, o un conjunto vinculado de documentos dependiendo de la configuración.

Y sería mejor si esto se hiciera de una manera que pueda ser se incluye completa y fácilmente en un repositorio git para que las personas no necesiten configurar una cadena de herramientas altamente específica para actualizar el doco. O requerir al menos una cadena de herramientas mínima.

Oh, y un pony.


Opciones existentes

JSDoc, más algún tipo de conversión HTML - > markdown

JSDoc es bastante bueno. Pero no puedo hacer que funcione bien con los módulos. O más bien, es una molestia más grande de lo que debería ser en mi humilde opinión. No debería necesitar agregar una etiqueta adicional al nombre función. He probado el @ export y @name y todavía tengo problemas para que aparezca en el documento final de la manera que me gustaría. Si alguien puede apuntar a una fuente comentada JSDoc que tiene módulos y está bien hecha, eso podría ayudar. Actualización: JSDoc v3 en realidad parece mucho mejor con módulos que v2 por lo que esto podría ser un mejor ajuste.

Incluso si pudiera obtener la salida JSDoc como quiero, tendría que convertir de HTML a markdown. No puedo encontrar una buena herramienta para eso. ¿existir?

Docdown

Jugué un poco con Docdown, pero el hecho de que sea PHP es una especie de nonstarter para mí...

YUIDoc, más conversión

En realidad no he jugado con YUIDoc, pero se ve bien. Aún así, necesitaría un convertidor. ¿Se ocupa de módulos fácilmente y evita tener que proporcionar el nombre de la función y el nombre de exportación explícitamente?

Dox, más plantillas de descuento

Dox produce JSON como su salida, entonces tendrías que combinar eso con algunas buenas plantillas de markdown, y además incluir un motor de plantillas para generar los documentos. ¿Alguien ha reunido un conjunto de tales plantillas de una manera útil?

JGrouse , más conversión

Corre con ANT. Siguiente...

ScriptDoc...

¿Ya existe esto? Parece ser parte de Aptana studio por lo que sería un nonstarter... Aptana no parece tener ninguna información al respecto. Pero ScriptDoc.org tiene algunos interesantes información sobre crack, si eso es útil...

Pdoc

Pdoc está basado en Ruby, pero esa cadena de herramientas no es infrecuente, por lo que no es un gran problema. Puede proporcionar sus propias plantillas, por lo que tal vez ya haya algunas buenas. No he jugado con él... vale la pena? ¿Existen buenas plantillas de markdown?

Algo más?

¿Qué más hay ahí fuera?

Haga su propio!

Después de jugar con JSDoc por unos pocos horas tratando de hacer que funcione como quería, me rendí y escribió mi propia solución rápida y sucia en Java para CharFunk, una biblioteca JavaScript unicode en la que he estado trabajando. Funciona lo suficientemente bien para lo que necesito, aunque aún no está cerca del propósito general.


So.....

¿Es esto una necesidad insatisfecha o es solo yo?

Author: jwl, 2013-03-29

7 answers

¿has probado jsdox?

Es un nodo.js jsdoc a markdown generator.

 12
Author: Steven de Salas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-24 19:06:57

Utilizo jsdoc-to-markdown..

Escribir código documentado:

/**
a quite wonderful function
@param {object} - privacy gown
@param {object} - security
@returns {survival}
*/
function protection(cloak, dagger){}

Obtener documentos de markdown:

$ jsdoc2md example/function.js

#protection(cloak, dagger)
a quite wonderful function

**Params**

- cloak `object` - privacy gown
- dagger `object` - security

**Returns**: `survival`

Estos proyectos tienen archivos readme renderizados por jsdoc2md:

 14
Author: Lloyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-19 11:30:30

Markdox puede generar documentos markdown a partir de código javascript.

 7
Author: user2367031,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-09 16:06:27

JsDox. https://github.com/sutoiku/jsdox Análisis completo usando UglifyJS

Mox. https://github.com/tjchaplin/mox Varios ejemplos/plantillas listos para ejecutar.

Ambos manejan formatos JSDoc/Dox. Ambos tienen un desarrollo activo. Para mí, Mox gana debido a la suite de ejemplo.

 3
Author: Chris Buck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-21 16:20:13

OK. Después de algunas deliberaciones conmigo mismo, iría con DOX + Underscore/Lo que sea JS templating engine over Node.

Debería ser bastante simple. Puede, posiblemente, incluso atascarse en Grunt o similar y ejecutarlo bajo una tarea de vigilancia.

Dox es, por lo que puedo recordar, es relativamente ligero y tiene un paquete npm (IIRC).

ACTUALIZAR: Creo, después de alguna experiencia, que me gustaría cambiar mi respuesta a YUIDoc.

 2
Author: ZenMaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-23 18:24:48

Intenta usar Verbo. En el caso de uso más simple, el verbo construirá un readme a partir de una plantilla usando data from package.json.

Pero verb también tiene características avanzadas si necesita generar TOC de varias páginas, o crear ayudantes personalizados, etc.

Con respecto a la documentación de la API, vea este ejemplo de readme generado usando comentarios de código de index.js. Haga clic en los encabezados, también se generan automáticamente. Use este ayudante integrado para generar documentos de API desde cualquier archivo ruta especificada. También puede usar patrones glob para extraer documentos de varios archivos.

El verbo construirá un .verb.md sin ninguna configuración. Pero si necesita más, puede usar un archivo verbal .js

 0
Author: jonschlinkert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-09 00:29:50

Tuve la necesidad de crear una documentación de API a partir de JSDoc que debería ser fácil de usar y también compatible con pilas de frontend modernas. Algunas de las bibliotecas mencionadas tienen problemas con el código JS transpilado en babeljs, por lo que debe transpilar su código con comentarios temporalmente solo para generar su documentación de markdown.

Para tal caso de uso encontré http://documentation.js.org / bastante útil ya que tienen soporte integrado para las configuraciones de BabelJS por lo que se encarga de generar markdown (JSON, HTML) desde tus JSDocs.

 0
Author: Fer To,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-18 14:28:44