@g48in/reqfile-colocation

中文文档
0.4.0发布于 2026/11/02MIT OR Apache-2.0ES Module构建来源已验证近 30 天下载 7752

reqfile checker for COLOCATION:每个功能拥有其代码,曝光一个接口,可以自行删除

中文使用文档
文档目录12 节
  1. 用这个
  2. 检查器
  3. 如何读取代码
  4. 缓存
  5. 封锁规则
  6. 并用. yaml( 可选, 严格)
  7. 措施
  8. 在真正的仓库
  9. 限制
  10. 把它当作封存支票
  11. 测量一下
  12. 释放

reqfile- 同一地点

可分享 req 文件 要求: 合并,每个 特性拥有其代码,暴露出一个接口,可以自行删除.

这是社区需求包的一快之快: 要求、其核对器和标有标签的基准,在一个存储库中 与任何项目内的要求相同的布局.

Reqfile.yaml                      # the requirement, same format as a local one
.reqfile/COLOCATION/examples/     # labeled benchmark: example.yaml (label, expected findings, rationale) + files/
src/                              # the checker, in TypeScript, published to npm

用这个

尝试它,然后通过它(reqfile 0.3或以后,与 阿宝 已安装 :

reqfile eval --use gabsn/[email protected]    # its score on its examples
reqfile check --use gabsn/[email protected]   # its findings on your code
reqfile add gabsn/[email protected]           # writes the line below

写道:

code:
  - { id: COLOCATION, use: gabsn/reqfile-colocation@<commit> }  # v0.4.0

检查运行 bunx @g48in/[email protected] verify (堵塞)和 ... suggest (咨询): Bun 获取检查器及其依赖性 (TypeScript 6,web-tree-sitter, yaml) 从npm一次并缓存它们. 蟒 仓库需要蟒蛇3号。 仅使用节点,使用 npx -y 改为 bunx。 。 。 .

检查器

reqfile-colocation 从寄存器根运行并读取整个 存储器( 尊重. gitignore) 。 它有两个命令,宣布为两个 核查合作情况:

  • verify挡住. 规则取自解决的依赖性图表和a 很少明确公约(一项) index.ts 或再出口 __init__.py 是一个 界面,测试文件由名称识别,工作流程步骤为 8 个或更多 线条是一个特性的逻辑)。 一个发现是关于解密代码的事实 这些公约不是建筑结论的证据: 公约是样式选择,下文对此作了说明。 每个判断文件以一个结尾 3个州,计为:

    • 达标: 一个SARIF pass 结果;
    • 违反: 一个SARIF fail 结果命名其规则、文件和行;
    • 无法核实: 本地导入, 解析为无, 文件 不解析, a mod x; 没有文件, 一个 stale 例外, Python 没有 python3 的文件 。 在 stderr 上列出; 运行出入口 2, 该出入口为 req 文件 报告为失败运行的错误.

    仅当每个文件被验证且没有规则被打破时退出 0; 1 当 有违反规定的情况,而且所有情况都经过了核实;2 当情况并非如此时.

  • suggest咨询. 需要知道哪些文件构成一个的休克 特性,代码未表示: 所有权从进口商读取, 1 功能分割到分级文件夹( e)split: 一个共享文件夹名称和 a 依赖性,作为应用/花园和下等/花园,或 oss/widget旁 部件/ evals ),仅在文件下方使用的项目,抓取包文件, 特性 打开文件夹,层名文件夹。 每项发现都有概率; 没有街区.

如何读取代码

语言解析器决议边界(接口)
类型脚本, JavaScriptTypeScript 6 的语法树TypeScript 模块分辨率与最近的 tsconfig/jsconfig ()extends, (中文(简体) ), paths, (中文(简体) ), baseUrl); 工作空间软件包按其软件包. json name, (中文(简体) ), exports, (中文(简体) ), main; 资产通过别名一个文件夹 index.* 出口
蟒蟒蛇3级 ast输入文件夹、 pyproject/设置根及其 src/,寄存器根; 一个正则软件包胜过命名空间文件夹; 名称绑在 if编号 :try 计数一个包裹,它的 __init__.py 再出口或定义 __all__; 它导出的名称通过它
锈树保姆的rust语法每个箱子根的模块树通过 mod (与 #[path](三); use 树、 合格路径、 宏参数内路径rustc 强制可见度, 因此编译的路径都不是绕行

外部进口的依赖性也计算:工作流程步骤中的路径, shell 脚本, package.json 脚本/bin编号 :exports,任务和运行文件 (mise.toml, Makefile, Dockerfile, wrangler.toml...), 列表和字符串 字义. 进入另一套件的路径取决于该套件.

缓存

在一棵没有改变的树上进行第二次运行,只检查它是否没有改变,而且 编辑后的文件再次单独解析(自0.4.0起). 缓存在 $REQFILE_CACHE/colocation,在git文件夹中, .git/reqfile/colocation除了reqfile的作品之外 答对. 它跟随寄存器: CI 任务开始冷, 除非它保持 运行之间的文件夹。 每个条目都按分析内容排序:

  • 一个文件自己写的是什么 (其导入,路径正文,解析错误) 以它 git blob 散列键取名 : 编辑后的文件已解析 其它文件则不是( TypeScript、 JavaScript 和 Python; Rust 文件) 当结果重新计算时,将再次解析.
  • 整个结果,分析和报告,由检查者自行键入 代码,它的运行时间和依赖的版本,寄存器的文件夹和 每个文件的 blob 散列列表: 索引, 否则字节 分析读取(修改后的文件和未跟踪的文件,链接到它们的 目标, 文件标记 assume-unchanged 或者说 skip-worktree) (中文(简体) ). 任何变动 重算它:模块解析和 Rust 解析然后全部运行. 模块解析度还读取 git 不列出的内容( node modules, 忽略) 建立输出, 从软件包扩展的 tsconfig : 每个这样的查询都是 以答案录入,结果只有在每次检索时才会重复使用 答案还是一样. verify 接下来 suggest 在一个树上分享一个 分析.

缓存没有改变报告的证据: 4个冷冻的蝎子 和arkadia,冷而温暖的字节 0.3.0个指纹,版本外(未更改的树); src/cache.test.ts 一次更改一个输入( 编辑、 返回、 符号链接的目标、 标记) 文件, tsconfig 和 package.json, 一个新删除或被忽略的文件, 一个已安装 并检查热跑 打印一个冷的。 没有 覆盖: git clean/ smodge 过滤器,其工作副本与 blob a 不同 事实已锁定 。 删除文件夹开始冷 .

在arkadia上(约2,300个文件,其中1,000个为TypeScript;中值为5) 在笔记本电脑上互换运行:

运行0.3.0 (中文(简体) )0.4.0 (中文(简体) )
verify空缓存1.54 s (中文(简体) )1.38s (中文(简体) )
verify 接下来 suggest空缓存3.23节1.84 s (中文(简体) )
verify,没有改变1.54 s (中文(简体) )0.20 s (简体中文)
verify,一个文件已编辑1.54 s (中文(简体) )0.76 s (简体中文)

封锁规则

规则断开时
interface从边界外部导入一个执行文件而不是其接口(一个软件包自己的文件可能会超过其根索引;生成的代码不受限制)
tests测试在它所测试的代码文件夹( 其名称, 否则它所导入的生产代码) 之外; 对一个软件包的入口或几个特性的测试可能活在软件包根; Rust tests/, (中文(简体) ), benches/, (中文(简体) ), examples/ 和迁移需要工具
entry一个工作流程步骤在寄存器的文件夹上运行了8行或8行以上的 shell , 而不是调用脚本( 8 是“ 有线” 的样式公约, 而不是证明这些行是特性的逻辑)
roots在同一个地点宣布的根下面。 yaml, 一个文件, 其若干特性的使用既不被宣布共享, 也不在一个特性内

并用. yaml( 可选, 严格)

roots:                       # make ownership checkable where it matters
  - path: src                # each direct file or folder of src/ is a feature
    shared: [src/format.rs]  # the modules several features share, by decision
exceptions:                  # explicit, limited, reported in every run
  - path: test/**
    rule: tests
    reason: the deployment image runs test/ only

未知的密钥、 不存在的已声明的路径或例外 匹配未找到失败运行( exit 2): 例外不能超过代码 他们原谅。 除调查结果外,在SARIF中属于公认的抑制.

措施

同一被冻结的人身保护令上的所有版本corpus-v4,73个实例):45个 发展实例(主要工程师审查的最后五个),16+ 两名独立作者撰写的12个确认实例 单凭要求,从不用于调音(两个重贴上作者的标签 见LABELS.md)。 发现违反/虚假警报 正确实例:

版本发展确认12. 确认 2
1.1.3 国家第10/20、3/25号决定0/7, 第4/9页1/5, 0/7 (中文(简体) )
0.2.0 (中文(简体) )第17/20、4/25号决定第1/7、3/9号决定1/5, 2/7 (中文(简体) )
0.3.0 (中文(简体) ) verify (屏蔽声)8/20,第8段), 0/25 (中文(简体) )1/7, (英语), 0/9 (英语)1/5, (英语), 0/7 (英语)
0.3.0 (中文(简体) ) verify + 键 suggest第20/20和1/25号决定第2/7和2/9号决议2/5, 2/7 (中文(简体) )

首次与被冻结的候选人(0人被抓到, 0假警报). 错过了 violation-ts-monorepo-emails 显示工作空间 没有节点模块软件包无法解析;随后的修补 因此,上面的1/5 已经污染了 已经看到这个案例.

号码上面写着: 封堵支票没有引起41号错误警报 例如,其中25个是发展实例,16个得到确认 实例并非如此;经证实,发现的违规行为很少(12起中有2起) 他们被污染。 多数 人身保护权中的侵权行为涉及所有权(档案构成一个特征), 仅由代码决定。 0的16/19 发展到 有关独立案例的2/12:其欣欣向荣的学说符合它们自己的例子.

在真正的仓库

verify 在8个储存所上(arkadia、reqfile-同处一地、吸毒器、, 平台, skoolradar, 大脑, 迷你, 焦树 : 0.3 s至 2 s; 每 无法验证的导入左侧是真实的已损坏的导入( 3 in voxrouter) 。 独立 审查人员打开了随机抽样调查结果后面的代码:

规则对虚假不确定
测试页:10 个2个
接口(两回合)页:11个3个
条目页:11(当时为固定:8行阈值)1个
拆分( 然后移动到 suggest,见下文)第9条1个2个
所有人,从进口商读取1个16个1人 迁至 suggest

一名审查员还搜索了36个未加标记的任意文件,以查清遗漏的违规行为 发现 17, 最需要的特性知识( 级别相同, 文件名) 前缀)或仅链接导入回 src/ 显示; 接口绕过 测试和测试树支持文件随后被固定。 细节 : 洛杉矶,md 财务报告和审定财务报表 设计。 。 。 .

限制

  • 编码中不包含所有权:一个表面使用的一个域可能是: 表面,或一个领域 表面只是使用. verify 只有决定 根据申报 roots; 其它处 suggest 指点它.
  • split 是咨询: 共享文件夹名称和依赖性不能证明一个 特征的身份。 每个域一个 api/ 层,一个叫 其它接口, 读作分割; 添加无关 api/ 文件夹制作 查找消失(重复三次以上的名称为层)。 这个 只有当特性或分级被宣布时,才能被封禁.
  • 不同名称的文件的分割( Namesrc/public/wrap.ts 财务报告和审定财务报表 src/internal/break-words.ts)不见.
  • 路径引用从字面路径读取:运行时所计算的路径, 和固定装置仅按路径测试名称,没有被看到.
  • 共用工具及其相同名称的用户之一(platform/agent-evals, (中文(简体) ), voxrouter/agent-evals当没有其他代码使用该工具时,读作分割.
  • Python 动态导入和由宏生成的 Rust 项不读取 .
  • 在不计算任何寄存器路径名称的工作流程中内置逻辑 .

把它当作封存支票

做一个 verify 检查 mode: blocking 当:

  1. 它的规则不会引起任何虚假的警报、发展和 等同确认(比0.3.0:0/35);
  2. 在寄存器上,它从0或1出口,从2: 每一个本地的进口解决, 或例外说为什么不;
  3. 每项调查结果都被视为真实、固定或例外 理由;
  4. 手审查的未标记文件样本显示没有丢失封存 规则;
  5. 它运行在10 s以下那里.

保留 suggest 咨询。 所有权只能通过 roots。 。 。 .

测量一下

bun install && bun test          # unit and end-to-end tests of the checker
reqfile eval                     # the labeled corpus, as published

每个违规者姓名 findings 每个文件都必须标出正确的检查符 (reqfile要求他们全部). split: holdout 标记确认 实例,由独立作者编写,从未用于调音. reqfile eval 运行 Reqfile 中命名的版本。 Yaml; 测量工作 抄写:, bun run build 将检查指向 node dist/main.js。 。 。 .

释放

弹出 version 包装 run: 然后推出一个 标签 vX.Y.Z通过信任的 CI 测试、构建和发布到 npm 出版,没有存储的代币.

版本与发布记录

@g48in/reqfile-colocation 共发布 4 个版本,首次发布于 2026/09/28;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.0latest2026/11/0214 天前
0.3.02026/10/061 个月前
0.1.32026/09/291 个月前
0.1.12026/09/281 个月前

关于 @g48in/reqfile-colocation 的常见问题

@g48in/reqfile-colocation 是什么?

reqfile checker for COLOCATION:每个功能拥有其代码,曝光一个接口,可以自行删除

如何安装 @g48in/reqfile-colocation?

在项目目录运行 npm install @g48in/reqfile-colocation,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 reqfile-colocation,可以用 npx reqfile-colocation 直接运行。

@g48in/reqfile-colocation 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/g48in__reqfile-colocation 是否存在。

@g48in/reqfile-colocation 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@g48in/reqfile-colocation 可以商用吗?

@g48in/reqfile-colocation 使用 MIT OR Apache-2.0 许可。可在 MIT、Apache-2.0 中任选其一遵守。选择 MIT 时,宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@g48in/reqfile-colocation 的下载量有多少?

根据 npm 官方下载统计,@g48in/reqfile-colocation 在 2026/10/16 – 2026/11/14 这 30 天内被下载 7,752 次,日均约 258 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@g48in/reqfile-colocation 还在维护吗?

最新版本 0.4.0 发布于 2026/11/02(14 天前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/09/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。