
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 yoheimuta/protolint lint .
--volume "$(pwd):/workspace":将宿主机当前目录挂载到容器内的/workspace目录--workdir /workspace:设置容器工作目录为/workspace,确保工具在挂载的项目目录中查找文件lint .:对当前目录下所有protobuf文件(递归查找)执行 lint 检查检查指定文件/目录
检查特定目录下的protobuf文件:
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace 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 yoheimuta/protolint lint -fix .
-config_path:指定自定义配置文件路径
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace yoheimuta/protolint lint -config_path=path/to/.protolint.yaml .
-reporter:指定输出格式(支持plain默认、junit、json、unix)
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace yoheimuta/protolint lint -reporter junit .
-plugin:加载自定义规则插件
bashdocker run --volume "$(pwd):/workspace" --workdir /workspace yoheimuta/protolint lint -plugin ./my_custom_rule .
list:列出当前启用的所有规则
bashdocker 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失败(如文件解析错误、内部运行错误等)您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务