tree-sitter 支持 Elisp 本身吗?

复制 intervals 可以不简单,会重新平衡 interval tree,text property 多的 buffer 可以消耗几秒钟的时间。 关于 coding system,是我错了,从 Emacs 内部换 unicode 之后就没有单独解码了。

这个是上面 make_buffer_string_both 里面 if (props) 运行的內容,我找了个 tree-sitter 的 emacs 绑定实现看了下,实际上调用的是 buffer-substring-no-propertiesprops 会设为 0,不会对 text property 相关的內容进行操作。

不过 tree-sitter 本身有 bug 不能实现整合是另一回事了。


我这里没啥感觉,用的下面的。估计配置差異。

(add-hook 'post-command-hook
	  (lambda () (buffer-substring-no-properties (point-max) (point-min))))

而且 after-change-functions 就行了,post-command-hook 有点过了。

即使使用 `buffer-substring-no-properties’,也会创建新 string,复制一次,次数多了也会导致 GC

我在 post-command-hook 中加上了 `buffer-substring-no-properties’,然后就开始不停的 GC,无法接受

说白了,不管 memcpy 速度如何,通过复制 buffer 内容来实现 incremental parsing 就不是正确的实现方式,正确的实现方式是在 Emacs 内置 tree-sitter,而 Emacs 这边的工作已经做的差不多了,只剩下等 tree-sitter 开发者修 bug

5 个赞

我有个小问题,内置 tree-sitter 是指以 C 代码形式加到 Emacs 吗?这样是不是让 Emacs C 代码部分变大了?以及这种变大会有坏处吗?问题纯属好奇。

没有,就是和别的库一样变成编译时可选依赖。

tree sitter要改allocator必须从源码编译,估计得加入emacs源码树

期待 tree-sitter 能够加入 Emacs master 分支,之前看到 @casouri 大佬在准备。

不知道在哪里可以看到进度? 预计什么时候可以用上?

照你这么说,gcc emacs merge 以后得把 gcc 也整进 emacs 代码里了, 因为 libgccjit 也要改 gcc 编译参数(

项目地址

casouri 主页里 tree-sitter 的一些相关介绍

邮件列表上的讨论

单集成而言,某种意义上应该算得上是已经完成了,剩余的部分更多的我觉得应该归类到对 tree-sitter 的运用?可能就像另一个贴子里 oldosfan 说的那样或许是在等待 tree-sitter 的开发者解决一些关于 malloc 的问题?

1 个赞

tree-sitter 改 allocator 是通过 preprocessor 覆盖

比如这样

#define ts_malloc my_custom_malloc

#include  lib.c

不像 gmp, 是通过 mp_set_memories_function 改 allocator 。当然了这样做的代价是,当另外一个库也引用了 gmp 并且通过这个函数修改 allocator,你自己的 allocator 就被覆盖了

不改应该也有办法,这是讨论了改的情况

libgccjit,记得几个为了 gccemacs 改的补丁都是直接被上游合并了

2 个赞

mac 下编译出错。 gcc ./src/parser.c ./src/scanner.cc -fPIC -I./ --shared -o vue.so -v

“/Library/Developer/CommandLineTools/usr/bin/ld” -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -dylib -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o vue.so /var/folders/mr/_vf8pfn14_sbg5szyxc259040000gp/T/parser-afb469.o /var/folders/mr/_vf8pfn14_sbg5szyxc259040000gp/T/scanner-ebe213.o -L/usr/local/lib -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a Undefined symbols for architecture x86_64:

不知道是哪里出错了

没有mac,不晓得哇

你好,在lazycat emacs的配置里面怎样把tree-sitter-vue的模块去掉 Error running timer: (error “Cannot find shared library for language: vue”)

按照 GitHub - manateelazycat/grammatical-edit: Grammatical edit base on tree-sitter 底部三段话执行一遍就可以了。

最新的 tree-sitter 从 tree-sitter/langs/bin 加载动态库,原来是 tree-sitter-langs/bin 这个目录