emacs集成tree-sitter有人实现了?

你的未来能创造一个亿,我今天就一定要拿全部一百万身家投资你吗? Vim 的目标是拿来就用的,等不到美好未来,这才是现实问题。

当然可以准备上马 tree-sitter,但不是现在就上马而没有第二套方案,这不是严谨的态度。

讨论 TextMate 的方案不是为了稳定而选择降低上限,而是确保自己的下限不被不稳定的 tree-sitter 破坏。

反正 Emacs 这边是没拦着你用原有的方案,你觉得不稳定就还用原来的。

2 个赞

tree-sitter对于Emacs缺乏支持的语言还是很有用的,比如说typescript。我前年惊讶地发现Emacs没有内置的typescript-mode,这语言不是挺主流的吗。。?至于typescript react这些,则更不用说了。我写了一年多的前端React代码,前半年用的是web-mode,在写内嵌JSX元素时基本上一直处于无法正确缩进的状态,只能借助于lsp server来进行format,而且正常输入时经常会很卡。。

后来自己改了一份tree-sitter-indent,用它写了一个react-mode,主要提供语法高亮与缩进支持,用着无比流畅。现在看devel讨论,Emacs未来对typescript的支持好像基本上要靠tree-sitter了?

至于tree-sitter不稳定这点,我也经常有遇到代码写着写着,依赖于tree-sitter-hl-mode的语法高亮就挂掉了,代码一片狼藉。。这个问题主要在C++里遇到。

2 个赞

Neovim最新发布的0.8也只内置了c和lua得treesitter parser,其他的语言的parser都得自己去安装nvim-treesitter然后下载这个插件分发的二进制。

treesitter目前就是还不够成熟,而且就连在这方面做出探索最多的neovim的client都有很大的进步空间。neovim的treesitter现在还不支持部分parsing,仍然是打开一个buffer上来就把整个文本全部parse掉。即便如此,在那个 vim thread的讨论里,他们提到,用treesitter渲染20万行sqlite c只需要1.1秒。

vim这种注重稳定的软件目前不考虑上treesitter是可以理解的,即使是neovim目前给treesitter的定位都是experimental,而且这个东西目前确实是只能提高上限,不能保下限。

但是我还是觉得上texmate的意义没啥必要,这东西本质和vim的现有的regex highlight都差不多,花那么大精力把它port过来,提升感觉也不会很大。brammol目前的想法似乎就是这样。他在期待有人先把把texmate的语法转换成vim syntax语法的东西做出来,然后再继续做测试。

1 个赞

treesitter分支进了emacs master分支了

好消息。今晚又可以编译新 Emacs 了

可惜 tree-sitter 问题太多:

https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-11/msg01851.html https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-11/msg01891.html https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-11/msg01757.html

性能确实比 CC Mode 好。

2 个赞

就第一个问题,emacs 可能得维护自己的 tree-sitter-c 和 queries 才行,好几个语言的 tree-sitter-xxx 都不怎么样。

据说 tree-sitter C parser 的维护者不愿意支持macro。

所以才需要自己做嘛

没有宏的C语言非常简单, 一旦有了宏, 比很多语言都复杂, 担心tree-sitter目前是否有能力处理这么复杂的逻辑.

另外, C还常常把宏放在单独的头文件里面, 还涉及多文件解析, 好复杂

我估计 C 还是得依靠 CC Mode。