¿Alguien sabe de una buena herramienta para generar documentación de Google Protobuf utilizando los archivos fuente .proto?¿Generar documentación de Protobuf?
Respuesta
Doxygen admite los llamados filtros de entrada, que le permiten transformar el código en algo que doxygen entiende. Escribir dicho filtro para transformar Protobuf IDL en código C++ (por ejemplo) le permitiría usar toda la potencia de Doxygen en archivos .proto. Ver el artículo 12 del Doxygen FAQ.
Hice algo similar para CMake, el filtro de entrada solo transforma las macros y funciones de CMake en declaraciones de función C. Lo puedes encontrar here.
https://code.google.com/apis/protocolbuffers/docs/techniques.html
Mensajes auto-descripción
Protocol Buffers no contienen descripciones de sus propios tipos. Por lo tanto, dando solo un mensaje en bruto sin el correspondiente archivo .proto definiendo su tipo, es difícil extraer datos útiles.
Sin embargo, tenga en cuenta que el contenido de un archivo .proto puede ser representado utilizando búferes de protocolo. El archivo src/google/protobuf/descriptor.proto en el paquete de código fuente define los tipos de mensajes implicados. El protocolo puede generar un archivo FileDescriptorSet, que representa un conjunto de archivos .proto, utilizando la opción --descriptor_set_out. Con esto, puede definir un mensaje de protocolo de autodescripción como lo siguiente:
mensaje SelfDescribingMessage {// Conjunto de archivos .proto que definen el tipo. requerido FileDescriptorSet proto_files = 1;
// Nombre del tipo de mensaje. Debe estar definido por uno de los archivos en // proto_files. string requerido type_name = 2;
// Los datos del mensaje. bytes requeridos message_data = 3; }
Al utilizar clases como DynamicMessage (disponible en C++ y Java), puede escribir herramientas que pueden manipular SelfDescribingMessages.
Dicho todo esto, la razón de que esta funcionalidad no esté incluida en la biblioteca de Protocolo de búfer se debe a que nunca hemos tenido uso de ella dentro de Google.
Se trata de transferir la definición del tipo de datos junto con los datos reales, no dice nada sobre la documentación. – djjeck
Dado que el archivo .proto es principalmente una declaración, normalmente me parece que el archivo fuente con comentarios en línea es una documentación sencilla y efectiva.
El archivo .proto es una documentación efectiva solo para desarrolladores. Puede no ser adecuado para menos personal técnico. – dux2
Un plugin protobuf de fuente abierta que genera DocBook y PDF a partir de los archivos proto.
http://code.google.com/p/protoc-gen-docbook/
responsabilidad: yo soy el autor del plugin.
Luce bien. Voy a darle una oportunidad. – dux2
En Protobuf 2.5, los comentarios "//" que coloca en sus archivos .proto realmente lo convierten en el código fuente java generado como comentarios de Javadoc.Más específicamente, el compilador protoc tomará sus comentarios "//" como esto:
//
// Message level comments
message myMsg {
// Field level comments
required string name=1;
}
voy a entrar en los archivos fuente de Java generados. Por algún motivo, el protocolo incluye los comentarios de Javadoc en las etiquetas <pre>
. Pero, en general, es una nueva característica agradable en v2.5.
El hilo es antiguo, pero la pregunta todavía parece relevante. He obtenido muy buenos resultados con Doxygen + proto2cpp. proto2cpp funciona como un filtro de entrada para Doxygen.
No puedo obtener el ejemplo proporcionado en el archivo de descarga para trabajar con Doxygen v1.8.9.1 y proto2cpp v0.5-beta. Si abro el archivo 'html/index.html' no puedo ver ninguna documentación. He habilitado el registro y pegado el resultado del archivo 'proto2cpp.log' generado [aquí] (http://pastebin.com/hkVYNPhM). ¿Cambió algo con respecto al filtrado en Doxygen? ¿Sabes cómo arreglarlo? ¿O tengo expectativas erróneas con respecto a este proyecto? –
Está funcionando como se esperaba con v1.8.1.1, aunque no puedo encontrar cambios fundamentales con respecto al filtrado de entrada en el CHANGELOG de "Doxgen". –
Además de la respuesta de askldjd, me gustaría señalar mi propia herramienta al https://github.com/estan/protoc-gen-doc. También es un plugin de compilador de buffer de protocolo, pero puede generar HTML, MarkDown o DocBook de fábrica. También se puede personalizar utilizando plantillas de bigote para generar cualquier formato basado en texto que desee.
Los comentarios de la documentación se escriben usando /** ... */
o /// ...
.
[actualización: Aug 2017. Adaptado a la reescritura completa Ir de protoc generación de errores, actualmente 1.0.0-rc
]
El protoc-doc-gen
, creado por @estan (ver también his earlier answer) proporciona una forma buena y fácil para generar su documentación en html, json, markdown, pdf y otros formatos.
Hay una serie de cosas adicionales que debo mencionar:
- estan ya no es el mantenedor de
protoc-doc-gen
, pero es pseudomuto - A diferencia de lo que he leído en varias páginas que es posible utilizar el formato enriquecido en línea (negrita/cursiva, enlaces, fragmentos de código, etc.) dentro de los comentarios
protoc-gen-doc
ha sido completamente reescrito en Ir y ahora usa Docker para la generación (en lugar deapt-get
)
El repositorio está ahora aquí: https://github.com/pseudomuto/protoc-gen-doc
Para demostrar el segundo punto he creado un repositorio de ejemplo para generar automáticamente la documentación Dat Project Protocolo HyperCore en un formato agradable.
Puede ver varias html
y markdown
opciones de generación de salida en (o buscar here para un ejemplo de reducción del precio de SO):
El guión TravisCI que hace toda la automatización es la siguiente simple .travis.yml
file:
sudo: required
services:
- docker
language: bash
before_script:
# Create directory structure, copy files
- mkdir build && mkdir build/html
- cp docgen/stylesheet.css build/html
script:
# Create all flavours of output formats to test (see README)
- docker run --rm -v $(pwd)/build:/out -v $(pwd)/schemas/html:/protos:ro pseudomuto/protoc-gen-doc
- docker run --rm -v $(pwd)/build/html:/out -v $(pwd)/schemas/html:/protos:ro -v $(pwd)/docgen:/templates:ro pseudomuto/protoc-gen-doc --doc_opt=/templates/custom-html.tmpl,inline-html-comments.html protos/HypercoreSpecV1_html.proto
- docker run --rm -v $(pwd)/build:/out -v $(pwd)/schemas/md:/protos:ro pseudomuto/protoc-gen-doc --doc_opt=markdown,hypercore-protocol.md
- docker run --rm -v $(pwd)/build:/out -v $(pwd)/schemas/md:/protos:ro -v $(pwd)/docgen:/templates:ro pseudomuto/protoc-gen-doc --doc_opt=/templates/custom-markdown.tmpl,hypercore-protocol_custom-template.md protos/HypercoreSpecV1_md.proto
deploy:
provider: pages
skip_cleanup: true # Do not forget, or the whole gh-pages branch is cleaned
name: datproject # Name of the committer in gh-pages branch
local_dir: build # Take files from the 'build' output directory
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard (see README)
on:
all_branches: true # Could be set to 'branch: master' in production
(PS: El protocolo hypercore es una de las especificaciones principales del Dat Project ecosistema de módulos para la creación de aplicaciones descentralizadas punto a punto.Solía su archivo .proto
para demostrar conceptos)
- 1. ¿Cómo generar documentación de javadoc con diéresis?
- 2. Generar documentación de JavaScript con Doxygen
- 3. cómo generar la documentación de API
- 4. Generar documentación de WCF usando SandCastle
- 5. Generar documentación para componentes compuestos JSF 2
- 6. ¿Cómo generar documentación para Asp.Net MVC?
- 7. Generar documentación de código HTML de un solo archivo
- 8. ¿Cómo puedo usar Sandcastle Help File Builder para generar documentación sin fuente de documentación?
- 9. Son mensajes protobuf compatibles en todas las versiones de protobuf
- 10. serialización de protobuf asincrónica
- 11. ¿Cómo generar documentación msdn desde javascript? Preferiblemente usando sandcastle
- 12. Resteasy - generar documentación REST desde Javadoc y anotaciones
- 13. Cómo generar documentación ejecutando un comando con cada svn commit
- 14. cómo usar appledoc para generar una documentación similar a Apple
- 15. Cómo elegir entre protobuf-csharp-port y protobuf-net
- 16. Convenciones de nomenclatura de Protobuf
- 17. Qt + protobuf, tipos?
- 18. herencia protobuf-net
- 19. -protobuf neta herencia "árbol"
- 20. Google protobuf en Linux
- 21. protobuf con herencia?
- 22. serialización de protobuf-net enumeración
- 23. Serialización/deserialización de Protobuf-net
- 24. Generando documentación de Javascript
- 25. Generación de documentación de Tastypie
- 26. Documentación para comentarios sobre la documentación de Qt? Qt + Doxygen?
- 27. Compatibilidad de formato de datos entre las versiones de protobuf
- 28. macro documentación de MSBUILD?
- 29. Filtrado masivo con protobuf-net
- 30. Campos autorreferenciales en mensajes protobuf
Que yo sepa (que era cierto hace un tiempo), la función "protoc" no guarda ninguno de los comentarios, por lo que cualquier cosa basada en el uso de los descriptores en serie sería difícil - probablemente tendría que ser un analizador personalizado. –
mira este hilo http://www.mail-archive.com/[email protected]/msg02830.html –