我觉得 tree-sitter的作者应该懂得 不能依赖某种buffer的实现
因为这些实現不能支持 emacs 用的那啥,marker。用來实現第三方 parse 的话 marker 挺重要的。
marker间移动是远远快于char pos间跳转么
VSC 这个是直接用 class advise 了 buffer impl。如果是 emacs 和 vim 这样不能修改 buffer impl 的还是不能实現。
并不,marker 说白了就是 char pos。然而 marker 相比直接用 integer 能自動在 buffer 接受输入后更新位置。当然你也可以自己实現 update 算法,当然不太可能比內建的快就是了。
代价就是marker多了影响性能
编辑器只要提供更新的文本和位置就行,具体实现应该没关系。而且tree-sitter允许你提供接口:“ The TSInput
structure lets you to provide your own function for reading a chunk of text at a given byte offset and row/column position. The function can return text encoded in either UTF8 or UTF16. This interface allows you to efficiently parse text that is stored in your own data structure.”
效果好的话, 直接集成到编辑器里面应该挺不错.
上面的撕逼贴删了吗,还好又回到正规可以继续看了,差点吓跑了
vsc用piece table?微软特色
这个tree-sitter在C++的效果怎么样?最近用Clangd时,项目稍微大一点点就会延迟明显。话说,最近csharp-mode 也支持tree-sitter了。
之前试过, 看 profile 结果确实把 font-lock 的耗时减少很多, 不过我这边项目的文件基本都控制在 2k 行以内, 体感上没什么差别.
建议 profile 一下, 看看是不是哪些插件在占用 cpu, treesitter 只能减少 font-lock 那部分耗时, 把占用 cpu 比较多的插件优化掉, 效果说不定更明显一些.
一直在关注,但是似乎自己平时写的几门语言一直没有什么支持。
看来还是先优化原有配置,去掉一些耗时的插件。等待tree-sitter更成熟一些再做尝试了。
imenu可以使用一下,比如typescript-mode
多谢,现在使用counel-imenu
结合xref-find-definitions
进行跳转,暂时够用。tree-sitter配置起来好像还不是很容易。
有了counsel-etags还需要xref吗? 感觉前者就已经很够用了.