想重新弄下 Emacs China ELPA 镜像,用 JavaScript(Node.js)实现同步的功能,需要解析 https://elpa.gnu.org/packages/archive-contents ,形如:
(ace-window .
[(0 10 0)
((avy
(0 5 0)))
"Quickly switch windows." tar
((:url . "https://github.com/abo-abo/ace-window")
(:maintainer "Oleh Krehel" . "[email protected]")
(:authors
("Oleh Krehel" . "[email protected]"))
(:keywords "window" "location"))])
试过几个 JavaScript 的 sexp 库,没发现可用的。
不清楚 Clojure 有没有解析 Emacs Lisp 的 Sexp 的工具?
这可行,缺点是依赖 Emacs,而且得写不少 Emacs Lisp 代码,实在没办法就只能用它了。MELPA 的 https://melpa.org/archive.json 就是用 Emacs 生成的。
Emacs Lisp 应该不用写很多,read 以后对一些不能自动转化的数据类型做一下处理用 27.1 自带的 JSON 函数就行了.
如果一定要 Node 的话,整个 parser generator 重写个专门读 package description 的 parser 应该工作量也不大。比如 GitHub - harc/ohm: A library and language for building parsers, interpreters, compilers, etc.
1 个赞
看了看感觉我弄不来,有机会再看看。用 Racket 做这个的 parser 应该比较容易,不知道能不能再转成 JS 或 WASM。可惜 Emacs Lisp 不能直接弄成 WASM。
现在的 elpa 镜像就是用 elisp + shell script 写的,现在想重写,想试一试 JavaScript。