The shared code-language table must not claim a suffix a dedicated viewer declares, and the Host read card must keep the `lang` values it already persisted. - Drop `csv` from the shared table: Code registers before Spreadsheet, so the earlier body would take `.csv` and the browser snapshot gate fails. - Add `readLangHintForPath`, the read card's legacy projection over the shared table: the 43 pre-unification suffixes keep their old short ids byte for byte, new suffixes use the canonical id. - Add an ownership regression test over the full preview registry that turns red when `csv` returns, plus byte-level and alias-normalized tests for the read projection.
3.3 KiB
description, kind
| description | kind |
|---|---|
| Client 代码界面与 Host read 卡片共享的唯一「扩展名 → 语法高亮语言」表。 | package-library |
dsh-util-code-language
English | 中文
概述
本仓库唯一的「文件扩展名 → 语法高亮语言」表,供 Client 的文档 Code 预览、diff 审阅与 Host read 工具持久化的 lang 提示共同使用。languageForPath 以大小写不敏感的方式把文件名或路径映射为规范化 grammar id,识别两种路径分隔符,并把前导点视为扩展名分隔符(.env 解析为 dotenv)。CODE_HIGHLIGHT_EXTENSIONS 列出全部已识别后缀,供预览注册使用。Host read 卡片保留统一前的短 id:readLangHintForPath 在同一张表上做投影——旧 read 表已识别的后缀保持逐字节相同的旧值,新增后缀则使用规范 id。该包可在浏览器使用,不提供 Cordis service,也不持有运行时状态;真正的分词仍由 Client 高亮器负责。
目录
语言选择
表位于 src/index.ts。每个键是规范化语言 id——即 Client 高亮器解析的 grammar id;每个值是选中它的、不含点的小写扩展名。languageForPath(path) 取路径最后一段的最后一个点之后的文本、转小写后在 Map 中查找;使用 Map 可避免 foo.constructor 这类文件名解析到 Object.prototype 成员。未列入表的 dotfile(.gitignore)、无扩展名、结尾点、未知后缀都返回 undefined,各消费方一律按纯文本渲染;前导点仍算分隔符,因此 .env 解析为 dotenv。/ 与 \ 都算路径分隔符,因此 Windows 路径与 POSIX 路径解析一致。
该集合按常见源码、配置、脚本、数据与标记扩展名精选,并非完整语言登记表。没有对应 grammar 的扩展名映射到最接近的 grammar(properties 映射到 ini,该 grammar 自带 properties alias);证书与锁文件扩展名(pem、crt、key、cer、lock)保持不表,csv 同样保持不表:Spreadsheet 预览声明该后缀且必须保留,因此更早注册的 Code 不能抢占它。消费方若希望 Client 高亮器真正分词,仍取决于该 grammar 已在其中注册——没有加载 grammar 的 id 会按纯文本渲染,而不是报错。
已知限制与暂缓事项
- 只匹配扩展名——
languageForPath只看后缀,因此Dockerfile、Makefile、.gitignore、.editorconfig这类靠文件名识别的名称仍不表。文件名规则暂缓。 - 不做内容嗅探——扩展名缺失或未知时,即使字节含义明确也按纯文本处理;本表从不读取内容。
- 精选而非穷举——本表小于 Shiki 的 grammar 目录与 GitHub linguist;新增语言意味着同时添加扩展名条目与 Client grammar 注册。
开发备注
维护者工作上下文——点击展开
无。
运行时不变式: 不发布伴生入口。这个工具不持有可变运行时关系。