豫言 / 语法高亮核验 @ 0.1.0

逐文件对照解析器语义标记与 TextMate 高亮。

源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。

说明.汉语.md

# 语法高亮核验

本工具逐一检查 Git 工作树内的豫言源码。它调用独立的豫言库 `库/编译器核心/编译步骤/语法分析/源码语义标记。豫`,复用编译器的词法分析、语法分析和语义标记定位;随后调用 `应用/开发工具/yuyan-vscode/test/语法高亮核验.mjs`,用 VS Code 扩展的同一份 TextMate grammar 与 Oniguruma 分词,对可比的源码范围逐字比较。

```sh
node 豫言操作系统/宿主/节点/宿主.cjs yy3_bs.wasm 应用/开发工具/语法高亮核验/入口。豫 -o yy语法高亮核验.wasm --parallel
node 豫言操作系统/宿主/节点/宿主.cjs yy语法高亮核验.wasm
```

可传仓库根目录。默认使用当前目录。候选文件由 `git ls-files -co --exclude-standard` 取得,只选择 `。豫`、`.yuyan`、`.yyon`,忽略 `_v0` 目录及 Git 忽略文件。文件表写入仓库根目录的 `yy语法高亮文件表.txt`;工具另建 `yy语法高亮上下文.txt`,只供本次语法解析时解析导入。每个文件交由独立的豫言解析进程处理,单文件默认超过五秒即计为未覆盖并继续扫描;可设 `YY_GRAMMAR_TIMEOUT_MS=20000` 重查大文件。解析结果按源码、解析器可执行文件与上下文内容的摘要缓存在 `.yybuild/语法高亮核验/`,修改 grammar 后可重用解析结果。完整报告写入 `yy语法高亮差异.json`。解析失败、超时、类别不一致和对照失败分别计数;不会把未覆盖文件算作一致。

语义标记偏移按 Unicode 字符计,TextMate 偏移按 JavaScript UTF-16 码元计;比较端先建立转换表。比较的是 TextMate scope 所代表的着色类别,而非取决于用户主题的 RGB 值。只比较解析器实际标记且双方类别可对应的源码字符;未标记的空白等不算作已验证。解析器的括号、方括号和逗号属于普通操作符,TextMate 则称为标点;对照时统一为“标点”。跨行区域的换行符没有 TextMate token,不作为差异。每个差异须报告路径、行列、原文、解析器类别、TextMate 类别和原始 scope 栈。结果是待复核的高亮差异:若解析器分类或类别映射本身有误,须先修其来源。

说明.文言.md

# 语法高亮核验

遍仓中豫源,以编器析其辞,定标记于原文;复以 TextMate 与 Oniguruma 分色,逐字校其可比之域。析败者别列,不阻余篇。

先以 `node 豫言操作系统/宿主/节点/宿主.cjs yy3_bs.wasm 应用/开发工具/语法高亮核验/入口。豫 -o yy语法高亮核验.wasm --parallel` 成器,后行 `node 豫言操作系统/宿主/节点/宿主.cjs yy语法高亮核验.wasm`。可授仓根,不授则取今径。候选出于 Git 工作树,取 `。豫`、`.yuyan`、`.yyon`,略 `_v0` 及所忽略之篇。文件表写 `yy语法高亮文件表.txt`,导入所据写 `yy语法高亮上下文.txt`,差异写 `yy语法高亮差异.json`;既析之果按源、器、上下文摘要藏于 `.yybuild/语法高亮核验/`。逐篇别起豫器,五秒不成则记未覆,仍校余篇;欲宽限可设 `YY_GRAMMAR_TIMEOUT_MS=20000`。

编器偏移按 Unicode 字,TextMate 按 UTF-16 码元,校前须转换。取 scope 所属之色类,不取随主题迁易之 RGB。惟校编器已标、两类可对应之字;无标之域不称已验。编器谓括号、方括号、逗号为常术,TextMate 谓之标点,校时同归标点;跨行之换行不妄报。每异具路径、行列、原文、二类及 scope;差异为待审之证,非独断编器必真。详见同名 `.汉语.md`。