4 个稳定版本
1.5.0 | 2024年6月18日 |
---|---|
1.4.0 | 2024年6月18日 |
1.3.0 | 2023年6月3日 |
1.2.0 | 2021年9月27日 |
#72 in 文本编辑器
235KB
7K SLoC
Emacs Lisp 的 Tree-sitter 语法
elisp 的树-sitter 语法。
支持的语法
- 原子(整数、浮点数、字符串、字符、符号)
- 列表(正常语法
(a b)
和点列表(a . b)
) - 向量
- 引用和取消引用(
'
、#'
、`
、,
、,@
) - 一些特殊的读取语法(
$#
、##
、#(""foo"" 1 2 x)
) - 字节码文字(
#[1 2 3 4]
) - 特殊形式(
let
等) - 注释
限制
- 自动加载cookie被视为普通注释
限制
Elisp 是一个具有用户定义宏的 lisp-2。简单的解析器无法检测例如 (foo (let ...))
是否是具有 let
表达式参数的函数调用,或者是一个宏调用,其中 let
有其他含义。
目前 tree-sitter-elisp 将所有内容都视为 s 表达式。这是准确的,但使得此包在生成文件内容摘要或进行语法高亮时不太有用。
Emacs 本身有更多可用的信息。Emacs 会根据当前实例中定义的宏来高亮宏调用。一些 elisp 包也提供了自定义高亮逻辑,例如 dash.el 中的 dash-fontify-mode
。
开发
查看仓库,然后使用 npm
安装依赖项。
$ npm install
然后您可以解析您喜欢的 elisp 文件。
$ npm run parse ~/.emacs.d/init.el
语法本身在 grammar.js 中。编辑语法后,您需要重新生成代码。
$ npm run generate
此项目还包含一些测试。
$ npm test
您还可以运行此解析器对您的 .emacs.d
进行测试,以确认它能够解析所有内容。
$ npm run parse -- '/home/wilfred/.emacs.d/**/*.el' --quiet --stat
为什么?
阅读和编写 elisp 的最佳场所当然是 Emacs。
然而,在 tree-sitter 上构建的工具生态系统正在不断增长,例如 GitHub。这个项目应该能让它们也支持 emacs lisp。
相关项目
tree-sitter-clojure 是另一个用于 Lisp 家族的 tree-sitter 包。它是一个有用的项目,可以与之进行比较,并且 有讨论 Lisp 特定挑战的笔记。
language-emacs-lisp 是用于 Atom 和 GitHub 的 elisp 的 textmate 语法。
依赖关系
~2.8–4MB
~72K SLoC