生成Protobuf文档?

有谁知道使用.proto源文件生成Google Protobuf文档的好工具吗?

一个开源的protobuf插件,可以从proto文件生成DocBook和PDF。

http://code.google.com/p/protoc-gen-docbook/

免责声明:我是该插件的作者。

除了askldjd的回答,我想指出我自己的工具在https://github.com/estan/protoc-gen-doc 。 这也是一个协议缓冲区编译器插件,但可以生成HTML,MarkDown或DocBook开箱即用。 它也可以使用Mustache模板进行定制,以生成您喜欢的任何基于文本的格式。

文档注释使用/** ... *//// ...编写。

Doxygen支持所谓的inputfilter,它允许你将代码转换成d​​oxygen理解的东西。 编写这样一个filter用于将Protobuf IDL转换为C ++代码(例如),可以让您在.proto文件中使用Doxygen的全部function。 请参阅Doxygen FAQ的第12项。

我为CMake做了类似的事情,inputfilter只是将CMakemacros和函数转换为C函数声明。 你可以在这里find它。

线程是旧的,但问题似乎仍然相关。 我用Doxygen + proto2cpp获得了很好的结果。 proto2cpp作为Doxygen的inputfilter。

[ 更新 :2017年8月。适应全面改写protoc-gen-bug,目前1.0.0-rc ]

由@estan创build的protoc protoc-doc-gen (另请参见他之前的回答 )提供了一种简单易用的方法来生成html,json,markdown,pdf和其他格式的文档。

还有很多我应该提到的东西:

  1. estan不再是protoc protoc-doc-gen的维护者,而是pseudomuto
  2. 与我在不同页面上阅读的内容相比,可以在注释中使用丰富的内联格式(粗体/斜体,链接,代码片段等)
  3. protoc-gen-doc在Go中被完全重写,现在使用Docker生成(而不是apt-get

版本库现在位于: https : //github.com/pseudomuto/protoc-gen-doc

为了演示第二点,我创build了一个示例存储库,以一种很好的格式自动生成Dat Project Hypercore Protocol文档。

您可以查看各种htmlmarkdown输出生成选项(或者查看SO上的降价示例):

完成所有自动化的TravisCI脚本就是这个简单的.travis.yml文件:

 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 

PShypercore协议是Dat Project生态分布式对等应用程序生态系统的核心规范之一,我用他们的.proto文件来演示概念

由于.proto文件大多只是声明,我通常会发现带有内联注释的源文件是直接和有效的文档。

在Protobuf 2.5中,你放到你的.proto文件中的“//”注释实际上将它作为Javadoc注释生成的Java源代码。 更具体的说,protoc编译器将会像你这样的“//”注释:

 // // Message level comments message myMsg { // Field level comments required string name=1; } 

将进入您生成的Java源文件。 出于某种原因,protoc将Javadoc注释包含在<pre>标记中。 但总而言之,这是v2.5中的一个不错的新function。

https://code.google.com/apis/protocolbuffers/docs/techniques.html

自我描述信息

协议缓冲区不包含他们自己types的描述。 因此,只给出一个没有相应的.proto文件定义其types的原始消息,就很难提取任何有用的数据。

但是请注意,.proto文件的内容本身可以使用协议缓冲区来表示。 源代码包中的src / google / protobuf / descriptor.proto文件定义了涉及的消息types。 protoc可以使用–descriptor_set_out选项输出FileDescriptorSet – 表示一组.proto文件。 有了这个,你可以定义一个自我描述的协议消息,如下所示:

消息SelfDescribingMessage {//定义types的.proto文件集。 需要FileDescriptorSet proto_files = 1;

//消息types的名称。 必须由// proto_files中的一个文件来定义。 必填stringtype_name = 2;

//消息数据。 所需字节数message_data = 3; }

通过使用像DynamicMessage(可用C ++和Java)的类,您可以编写可以操作SelfDescribingMessages的工具。

所有这一切,这个function没有包含在协议缓冲区库中的原因是因为我们从来没有在谷歌内部使用它。