Open Code Review 项目解析知识图谱 / 分组目录 / 配置与模型 / 四层规则链

四层规则链

配置模型进阶方法机制G-D · 配置与模型

What · 是什么

custom(--rule) > project(.opencodereview/rule.json) > global(~/.opencodereview/rule.json) > system(内嵌),doublestar glob 匹配
四层规则链,优先级:custom(--rule 旗标)> project(<repo>/.opencodereview/rule.json)> global(~/.opencodereview/rule.json)> system(内嵌 system_rules.json + rule_docs/ 44 个语言规则 md)
首匹配优先:规则命中时按层序取最上层匹配
文件匹配支持 doublestar glob(** 递归匹配任意层目录)+ 花括号 {a,b} 展开
merge_system_rule 选项控制是否合并系统内置规则
规则值可引用 .md/.txt 文件路径作为内容源;相对路径机制防目录穿越
CanonicalConfig() 生成 rule_config_sha256 规则指纹;内置 10+ 语言规则集(Java/TS/Go/Python/Kotlin/Rust/C++/C)及 NPE、线程安全、XSS、SQL 注入专项规则

Why · 为什么

原理 · Principle

分层治理:个人/团队/仓库/内置四层隔离,不同范围各自演进不互相污染

多语言与专项安全规则开箱即用,无需从零编写

glob 语法贴近开发者习惯(gitignore 风格),可精确圈定审查文件范围

How · 怎么做

项目级:仓库根建 .opencodereview/rule.json 定义规则
全局级:~/.opencodereview/rule.json 供所有项目共享
临时级:ocr review --rule <自定义规则文件路径>
文件匹配:glob 支持 **(如 **/src/**/*.java)与 {a,b}(如 *.{ts,tsx})
规则内容外置:rule 值指向 .md/.txt 路径(仅相对路径,防目录穿越)
系统规则控制:merge_system_rule 决定是否合并内置规则
验证指纹:CanonicalConfig() 输出的 rule_config_sha256 用于确认规则集版本与缓存一致性

案例 · Cases

代表性案例
团队统一规范:global 层放团队通用规则,项目层放仓库特有规则
专项安全审查:启用 NPE/线程安全/XSS/SQL 注入专项规则集
按语言分流:Java 规则匹配 **/*.java,TS 规则匹配 **/*.{ts,tsx}
长规则文本外置:写入 .md 文件,rule.json 只引用路径

反模式 · Anti-patterns

正反实例论证 · Evidence

正例 · Pro
保留系统规则并叠加项目层规则
{ "merge_system_rule": true}# <repo>/.opencodereview/rule.json 追加仓库规则# 优先级:custom(--rule) > project > global > system,首匹配优先
merge_system_rule: true 使系统内置 10+ 语言规则集(Java/TS/Go/Python/Kotlin/Rust/C++/C)及 NPE、线程安全、XSS、SQL 注入专项规则保持生效,项目层只按需追加。
反例 · Con
关闭 merge_system_rule 导致安全规则全失效
{ "merge_system_rule": false}
系统内嵌 system_rules.json 与 rule_docs/44 个语言规则 md 全部不再参与,NPE/XSS/SQL 注入等专项审查静默消失。
正例 · Pro
doublestar glob 精确圈定文件范围
"**/src/**/*.java" # ** 递归匹配任意层目录"**/*.{ts,tsx}" # {a,b} 花括号展开
规则匹配支持 ** 递归与花括号展开,按仓库目录结构与语言精确圈定审查范围,与 gitignore 风格一致。
反例 · Con
用 * 代替 ** 导致规则静默失效
"*/*.java"
* 只匹配单层目录,src/main/java 等多层目录下的 Java 文件全部不命中,规则看似配置了却不生效,且无任何报错提示。
正例 · Pro
长规则内容外置 .md/.txt 文件
# rule.json 中规则值引用外部文件(仅相对路径)"rules/java-npe.md"
规则值可引用 .md/.txt 文件路径作为内容源,长文本不塞进 JSON;相对路径机制同时防目录穿越。
反例 · Con
规则引用绝对路径或越级相对路径
"/etc/rules/x.md""../../outside.md"
绝对路径或越级相对路径构成目录穿越风险,应只用受限相对路径引用规则文件。

实践资产 · Assets

规则
内置系统规则(四层规则链最底层,首匹配优先)
internal/config/rules/system_rules.json · 1488 B
配置示例
项目级规则示例(rule.json:include/exclude + 四规则含 glob/docs 外置)
(自建示例) · 1308 B

相关边