protoc-gen-doc

protoc-gen-doc

Protocol Buffers编译器的文档生成插件

protoc-gen-doc是Protocol Buffers编译器的文档生成插件。它能从.proto文件注释生成HTML、JSON、DocBook和Markdown格式文档,支持proto2和proto3语法。该工具可通过Docker镜像或本地安装使用,提供自定义模板功能,支持多种注释样式和选择性排除。protoc-gen-doc为开发者提供了一种自动化生成Protocol Buffers文档的解决方案。

protoc-gen-docProtocol Buffers文档生成插件GoGithub开源项目

protoc-gen-doc

CI 状态 codecov GoDoc Go 报告卡

这是一个用于 Google Protocol Buffers 编译器(protoc)的文档生成器插件。该插件可以从 .proto 文件中的注释生成 HTML、JSON、DocBook 和 Markdown 文档。

它支持 proto2 和 proto3,并且可以在同一上下文中处理两者(请查看 示例 以获取证明)。

安装

有一个可用的 Docker 镜像(docker pull pseudomuto/protoc-gen-doc),其中包含了从 proto 文件生成文档所需的一切。

如果你想在本地安装,可以使用 go get 命令。

go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@latest

或者,你可以从 releases 页面下载适用于你的平台的预构建版本。

最后,该插件也可在 Maven Central 上获得。有关如何使用它的详细信息,请查看 gradle 示例

调用插件

通过向 protoc 编译器传递 --doc_out--doc_opt 选项来调用插件。该选项的格式如下:

--doc_opt=<格式>|<模板文件名>,<输出文件名>[,default|source_relative]

格式可以是内置格式之一(docbookhtmlmarkdownjson)或包含自定义 Go 模板 的文件名。

如果指定了 source_relative 标志,输出文件将写入与输入文件相同的相对目录。

使用 Docker 镜像(推荐)

Docker 镜像有两个卷:/out/protos,分别是用于写入文档的目录和包含 proto 文件的目录。

你可以通过运行以下命令为示例生成 HTML 文档:

docker run --rm \
  -v $(pwd)/examples/doc:/out \
  -v $(pwd)/examples/proto:/protos \
  pseudomuto/protoc-gen-doc

默认情况下,会为 /protos 卷中的所有 .proto 文件在 /out/index.html 中生成 HTML 文档。可以通过向容器传递 --doc_opt 参数来更改此设置。

例如,为所有示例生成 Markdown:

docker run --rm \
  -v $(pwd)/examples/doc:/out \
  -v $(pwd)/examples/proto:/protos \
  pseudomuto/protoc-gen-doc --doc_opt=markdown,docs.md

你还可以为单个文件生成文档。这可以通过向命令传递文件来完成:

docker run --rm \
  -v $(pwd)/examples/doc:/out \
  -v $(pwd)/examples/proto:/protos \
  pseudomuto/protoc-gen-doc --doc_opt=markdown,docs.md Booking.proto [可选列出更多文件]

你还可以排除与特定路径表达式匹配的 proto 文件。这可以通过传递第二个由 : 分隔的选项来完成。例如,你可以将任意数量的逗号分隔模式作为第二个选项传递:

docker run --rm \
  -v $(pwd)/examples/doc:/out \
  -v $(pwd)/examples/proto:/protos \
  pseudomuto/protoc-gen-doc --doc_opt=:google/*,somepath/*

注意:路径应该是容器内的路径,而不是主机上的路径!

注意:由于 Docker 中通配符扩展的工作方式,你不能在文件列表中使用通配符路径(例如 protos/*.proto)。为了解决这个问题,如果没有传递文件,容器将为 protos/*.proto 生成文档,可以通过挂载不同的卷来更改。

简单用法

例如,要为 proto 目录中的所有 .proto 文件生成 HTML 文档并输出到 doc/index.html,请输入:

protoc --doc_out=./doc --doc_opt=html,index.html proto/*.proto

插件可执行文件必须在 PATH 中才能使用。

使用预编译的二进制文件

或者,你可以使用 --plugin 选项指定预构建的/不在 PATH 中的二进制文件。

protoc \
  --plugin=protoc-gen-doc=./protoc-gen-doc \
  --doc_out=./doc \
  --doc_opt=html,index.html \
  proto/*.proto

使用自定义模板

如果你想使用自己的模板,只需使用模板文件的路径而不是类型。

protoc --doc_out=./doc --doc_opt=/path/to/template.tmpl,index.txt proto/*.proto

有关可用模板参数和函数的信息,请参阅 自定义模板。如果你只想自定义 HTML 输出的外观,请将你的 CSS 放在输出文件旁边的 stylesheet.css 中,它将被自动识别。

编写文档

可以为消息、字段、服务(及其方法)、枚举(及其值)、扩展和文件编写文档。一般来说,注释有两种形式:前导注释和尾随注释。

前导注释

前导注释可以在任何地方使用。

/** * 这是一个消息的前导注释 */ message SomeMessage { // 这是另一个前导注释 string value = 1; }

注意:文件级注释应该是语法指令的前导注释。

尾随注释

字段、服务方法、枚举值和扩展支持尾随注释。

enum MyEnum { DEFAULT = 0; // 默认值 OTHER = 1; // 其他值 }

排除注释

如果你想在 proto 文件中保留一些注释,但不希望它们成为文档的一部分,你可以简单地在注释前加上 @exclude 前缀。

示例:仅包含 id 字段的注释

/** * @exclude * 这个注释不会被渲染 */ message ExcludedMessage { string id = 1; // 此消息的 id。 string name = 2; // @exclude 此消息的名称 /* @exclude 此消息的值。 */ int32 value = 3; }

查看 示例 proto 文件 以了解所有选项。

输出示例

使用输入 .proto 文件

插件生成以下输出

查看 Makefile 中的 examples 任务以了解如何生成这些文件。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

下拉加载更多