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 当情况并非如此时.
- 达标: 一个SARIF
-
suggest咨询. 需要知道哪些文件构成一个的休克 特性,代码未表示: 所有权从进口商读取, 1 功能分割到分级文件夹( e)split: 一个共享文件夹名称和 a 依赖性,作为应用/花园和下等/花园,或 oss/widget旁 部件/ evals ),仅在文件下方使用的项目,抓取包文件, 特性 打开文件夹,层名文件夹。 每项发现都有概率; 没有街区.
如何读取代码
| 语言 | 解析器 | 决议 | 边界(接口) |
|---|---|---|---|
| 类型脚本, JavaScript | TypeScript 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)。 发现违反/虚假警报
正确实例:
| 版本 | 发展 | 确认1 | 2. 确认 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) 。 独立
审查人员打开了随机抽样调查结果后面的代码:
| 规则 | 对 | 虚假 | 不确定 |
|---|---|---|---|
| 测试 | 页:1 | 0 个 | 2个 |
| 接口(两回合) | 页:1 | 1个 | 3个 |
| 条目 | 页:1 | 1(当时为固定:8行阈值) | 1个 |
拆分( 然后移动到 suggest,见下文) | 第9条 | 1个 | 2个 |
| 所有人,从进口商读取 | 1个 | 16个 | 1人 迁至 suggest |
一名审查员还搜索了36个未加标记的任意文件,以查清遗漏的违规行为 发现 17, 最需要的特性知识( 级别相同, 文件名) 前缀)或仅链接导入回 src/ 显示; 接口绕过 测试和测试树支持文件随后被固定。 细节 : 洛杉矶,md 财务报告和审定财务报表 设计。 。 。 .
限制
- 编码中不包含所有权:一个表面使用的一个域可能是:
表面,或一个领域 表面只是使用.
verify只有决定 根据申报roots; 其它处suggest指点它. split是咨询: 共享文件夹名称和依赖性不能证明一个 特征的身份。 每个域一个api/层,一个叫 其它接口, 读作分割; 添加无关api/文件夹制作 查找消失(重复三次以上的名称为层)。 这个 只有当特性或分级被宣布时,才能被封禁.- 不同名称的文件的分割( Name
src/public/wrap.ts财务报告和审定财务报表src/internal/break-words.ts)不见. - 路径引用从字面路径读取:运行时所计算的路径, 和固定装置仅按路径测试名称,没有被看到.
- 共用工具及其相同名称的用户之一(
platform/agent-evals, (中文(简体) ),voxrouter/agent-evals当没有其他代码使用该工具时,读作分割. - Python 动态导入和由宏生成的 Rust 项不读取 .
- 在不计算任何寄存器路径名称的工作流程中内置逻辑 .
把它当作封存支票
做一个 verify 检查 mode: blocking 当:
- 它的规则不会引起任何虚假的警报、发展和 等同确认(比0.3.0:0/35);
- 在寄存器上,它从0或1出口,从2: 每一个本地的进口解决, 或例外说为什么不;
- 每项调查结果都被视为真实、固定或例外 理由;
- 手审查的未标记文件样本显示没有丢失封存 规则;
- 它运行在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
出版,没有存储的代币.