三个月前试着写了一下 WGSL(WebGPU Shader Language)的 tree-sitter parser generator. 今天有点时间写了下 emacs 的 major-mode 支持:
include-yy/tree-sitter-wgsl: WGSL grammar for tree-sitter
这个 repo 里面主要是 parser 的实现,另外也有一个简单的 wgsl-ts-mode.el 提供对应的 major-mode 基本功能。在编译后将 DLL 放置于 .emacs.d 的对应位置后,如果 Emacs 支持 tree-sitter 在加载 wgsl-ts-mode .el 后应该能正常使用 wgsl-ts-mode 高亮 WGSL 文件了:
当然,我参考了已有的实现: acowley/wgsl-ts-mode: WGSL tree-sitter support for emacs,作者还在 reddit 上发过帖子: wgsl-ts-mode r/planetemacs ,但没人鸟他。
虽然写完一看 elisp 有 200 多行,但是里面的代码非常公式化,参考 Emacs 内置的一些 ts-mode 就能很快写出来,写起来并没有想象的那么麻烦。如果你能看完 tree-sitter 的文档,然后照着想要写 major-mode 的语言的 grammar.js 写就行了。
WGSL 的 tree-sitter parser 实现 star 比较多的是 szebniok/tree-sitter-wgsl,但也有很久没有更新了。WGSL 标准现在变动的还挺快,估计我写的很快会过时。
有时间再改进代码了之后写个总结。