
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
protolint是一款针对Protocol Buffer文件(proto2+proto3)的可插件化 linting 工具,旨在强制实施Protocol Buffer的代码风格和约定规范。它无需依赖编译器,直接解析文件即可快速运行,规则与官方风格指南完全对应,同时支持通过文件内注释临时禁用规则(适用于需保持API兼容性同时尽可能强制风格的场景),可加载自定义规则插件,并提供多种集成方案(如protoc插件、编辑器集成、GitHub Action、CI流程等)。
:this)或下一行(:next)protolint提供官方Docker镜像yoheimuta/protolint,可直接集成到Docker工作流中,快速进行protobuf文件 lint 检查。
基础运行命令
挂载当前目录并检查所有protobuf文件:
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint .
--volume "$(pwd):/workspace":将宿主机当前目录挂载到容器内的/workspace目录--workdir /workspace:设置容器工作目录为/workspace,确保工具在挂载的项目目录中查找文件lint .:对当前目录下所有protobuf文件(递归查找)执行 lint 检查检查指定文件/目录
检查特定目录下的protobuf文件:
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint _example/proto
输出示例:
[_example/proto/invalidFileName.proto:1:1] File name should be lower_snake_case.proto. [_example/proto/issue_88/oneof_options.proto:11:5] Found an incorrect indentation style " ". " " is correct. [_example/proto/issue_88/oneof_options.proto:12:5] Found an incorrect indentation style " ". " " is correct.
常用命令参数
-fix:自动修复部分可修复规则(如IMPORTS_SORTED、INDENT)
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint -fix .
-config_path:指定自定义配置文件路径
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint -config_path=path/to/.protolint.yaml .
-reporter:指定输出格式(支持plain默认、junit、json、unix)
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint -reporter junit .
-plugin:加载自定义规则插件
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace docker.xuanyuan.run/yoheimuta/protolint lint -plugin ./my_custom_rule .
list:列出当前启用的所有规则
bashdocker run docker.xuanyuan.run/yoheimuta/protolint list
在protobuf文件中,可通过特定注释临时禁用或启用规则:
proto// protolint:disable ENUM_FIELD_NAMES_UPPER_SNAKE_CASE enum Foo { firstValue = 0; // 无错误 } // protolint:enable ENUM_FIELD_NAMES_UPPER_SNAKE_CASE
使用:this或:next参数精确控制作用范围:
protoenum Foo { // protolint:disable:next ENUM_FIELD_NAMES_UPPER_SNAKE_CASE firstValue = 0; // 无错误(仅下一行禁用) second_value = 1; // protolint:disable:this ENUM_FIELD_NAMES_UPPER_SNAKE_CASE(仅当前行禁用) THIRD_VALUE = 2; // 会触发错误(规则已启用) }
protolint支持通过.protolint.yaml配置规则,默认在当前目录及父目录中自动查找。示例配置:
yamlall_default: true # 启用所有默认官方规则 rules: ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH: suffix: "INVALID" # 自定义枚举零值后缀为"INVALID"(默认"UNSPECIFIED") FILE_NAMES_LOWER_SNAKE_CASE: exclude: ["legacy.proto"] # 排除特定文件不检查文件名规则 SERVICE_NAMES_END_WITH: # 启用非官方规则:服务名需以"Service"结尾 suffix: "Service"
| ID | 用途 |
|---|---|
| ENUM_FIELD_NAMES_PREFIX | 验证枚举字段名以枚举名(UPPER_SNAKE_CASE)为前缀 |
| ENUM_FIELD_NAMES_UPPER_SNAKE_CASE | 验证枚举字段名为全大写蛇形命名(如CAPITALS_WITH_UNDERSCORES) |
| ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH | 验证枚举零值字段名以指定后缀结尾(默认"UNSPECIFIED",可配置) |
| ENUM_NAMES_UPPER_CAMEL_CASE | 验证枚举名为大驼峰命名(首字母大写,如FooBar) |
| FILE_NAMES_LOWER_SNAKE_CASE | 验证文件名为小写蛇形命名(如lower_snake_case.proto,可配置排除文件) |
| FIELD_NAMES_LOWER_SNAKE_CASE | 验证字段名为小写蛇形命名(如underscore_separated_names) |
| IMPORTS_SORTED | 验证导入语句已排序(支持-fix自动修复) |
| MESSAGE_NAMES_UPPER_CAMEL_CASE | 验证消息名为大驼峰命名(如SongServerRequest) |
| ORDER | 验证文件元素顺序(syntax -> package -> import -> option -> 其他定义) |
| PACKAGE_NAME_LOWER_CASE | 验证包名为小写字母(如my.package) |
| RPC_NAMES_UPPER_CAMEL_CASE | 验证RPC方法名为大驼峰命名(如GetSomething) |
| SERVICE_NAMES_UPPER_CAMEL_CASE | 验证服务名为大驼峰命名(如FooService) |
| MAX_LINE_LENGTH | 验证行长度不超过指定值(默认80字符,可配置) |
| INDENT | 验证缩进风格(默认2空格,支持-fix自动修复) |
| PROTO3_FIELDS_AVOID_REQUIRED | 验证proto3中不使用required字段 |
| PROTO3_GROUPS_AVOID | 验证proto3中不使用groups |
| REPEATED_FIELD_NAMES_PLURALIZED | 验证重复字段名为复数形式(如song_names) |
| ID | 用途 |
|---|---|
| SERVICE_NAMES_END_WITH | 验证服务名以指定后缀结尾(可配置,如"Service") |
| FIELD_NAMES_EXCLUDE_PREPOSITIONS | 验证字段名不包含介词(如"for"、"at",可配置排除词) |
| MESSAGES_HAVE_COMMENT | 验证所有消息有注释(可配置强制Golang风格注释) |
| SERVICES_HAVE_COMMENT | 验证所有服务有注释(可配置强制Golang风格注释) |
| RPCS_HAVE_COMMENT | 验证所有RPC有注释(可配置强制Golang风格注释) |
| FIELDS_HAVE_COMMENT | 验证所有字段有注释(可配置强制Golang风格注释) |
| ENUMS_HAVE_COMMENT | 验证所有枚举有注释(可配置强制Golang风格注释) |
| ENUM_FIELDS_HAVE_COMMENT | 验证所有枚举字段有注释(可配置强制Golang风格注释) |
| SYNTAX_CONSISTENT | 验证语法版本一致(默认proto3,可配置) |
0:lint成功,无错误1:lint成功,存在至少一个风格错误2:lint失败(如文件解析错误、内部运行错误等)您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务