该技能用于实现或修改 Biome 解析器行为,包括 .ungram 语法、词法器、token 源、解析规则、分隔列表与错误恢复。以 crates/biome_parser/CONTRIBUTING.md 为权威指南,按当前语法、词法器、解析规则或恢复任务阅读对应章节。
用途与流程:先检查语言语法与相邻解析规则;在改动恢复行为前,先添加或调整 ok/ 与 error/ 聚焦夹具;树形状变化时更新语法;.ungram 变更后重新生成语法与工厂产物。随后用显式存在性测试与有界恢复实现解析逻辑,运行对应语言解析器聚焦测试并检查快照。
语法要点:xtask/codegen/ 下的语法文件定义类型化语法节点与字段;节点以语言名作前缀,联合以 Any 命名,可恢复的非法语法使用 Bogus 节点,列表节点名以 List 结尾,列表表示为存在且可能为空的节点而非可选字段。语法变更后运行:just gen-grammar <lang>。解析规则仍为手写。
存在性契约:仅当未消费任何 token 时返回 Absent;在调用 start、bump、eat、expect 或其他可能推进的解析器前,测试首个区分性 token。必选 token 用 expect,可选 token 用 eat,可选节点用 .ok(),必选节点用 .or_add_diagnostic(...),非法节点用类型化恢复保留在 CST 中。不要用回溯替代有界前瞻或更精确的存在性测试。
错误恢复:恢复须保留后续有效语法,并生成语法允许的 bogus 节点。恢复集通常包含最近的分隔符、列表或块终止符、语句边界或下一有效构造的起始 token。不要从不相关语法位置复制恢复集。
列表:匹配契约时使用解析器基础设施的列表 trait。分隔列表需确认识别包围终止符、分隔符处理与尾随分隔符语法一致、非法元素能推进或停止、恢复不会消费包围终止符、空列表仍产生所需列表节点。
词法器与 token 源:遵循 biome_parser 当前 Lexer 与缓冲 token 源 trait,不复制旧实现;使用词法器基础设施提供的受检字节与字符访问器;上下文相关含义处保持词法上下文显式;每条词法路径都推进或返回 EOF;用 &str 词法测试验证多字节字符与字符边界,畸形字节序列仅通过既有面向字节的 API 测试。
测试与审查:加载 testing-codegen 用于解析器快速测试与快照机制;开发时用 crate 的 quick_test 检查 CST;在 ok/ 与 error/ 目录添加持久夹具。修复需最小失败夹具;恢复改动需畸形输入后接有效语法以证明恢复正确。审查清单包括:Absent 不消费输入、必选节点与 token 产生有用诊断、恢复产生语法有效的 bogus 节点、每个循环推进或退出、列表恢复在包围边界前停止、CST 保留全部源码(含畸形输入)、语法变更包含生成产物、有效与畸形夹具覆盖改动路径。
限制:未提供收费、价格、平台或效果信息。