为啥``风格的字符串不能判断呢? tree-sitter-go 的bug吗?
应该是吧,极限情况感觉还不是很准。
因为判断成字符串了? 很多时候其实是在 fields 后面加 tag
tree-sitter-langs 内置的 typescript.so 有问题,TypeScript语言的支持需要如下设置:
Make tree-sitter to support Typescript
1. git clone https://github.com/tree-sitter/tree-sitter-typescript.git
2. gcc ./tsx/src/parser.c ./tsx/src/scanner.cc -fPIC -I./ --shared -o typescript.so
3. cp ./typescript.so ~/.tree-sitter-langs/bin (~/.tree-sitter-langs/bin is path of your tree-sitter-langs repo)
(tree-sitter-load 'typescript "typescript")
(add-to-list 'tree-sitter-major-mode-language-alist '(typescript-mode . typescript))
今天修复了Wrap和Newline操作的一些小bug,建议大家更新一下。
这得看语言对应的 tree-sitter 实现的够不够细。细节总是要处理的,区别是放在 tree-sitter-lang 的代码里还是放在编辑器的代码里进行处理。
放在 tree-sitter-lang 做和 lsp 的情况差不多,一个通用的后端更有力于集中社区的精力。
所以某些功能适合直接向对应的 tree-sitter-lang 做贡献是最好的,仅仅在 emacs 里做没办法回馈整个语言社区。
语言细节直接写到代码中就行了,没必要分文件。
按道理这种语言细节应该越少越好,因为不会像原来正则那样差别那么大。
今天加了一个新的 向上跳到父节点的命令 grammatical-edit-jump-up
这个命令的应用场景是:
在一个非常大的Python class (比如上百行)中工作,正在编写里面的函数时,发现需要先跑到 class 的 init 函数去先声明一个属性才能继续编写函数,传统的做法是向上搜索 class 关键字或者瞄一下当前函数所属class名用 imenu 来跳转。
如果用 grammatical-edit-jump-up 命令就非常方便,不用看当前是什么class名,直接无脑的按这个命令,最多不超过3下就可以快速跳到 class 的定义位置。
这个命令最大的优点是心智负担非常低。
Emacs 29 内置的 treesit 的API名字和外面的 tree-sitter 还是非常不一样的, 而且能力更强。
所以, grammatical-edit 不再开发了, 相关代码已经移动到 GitHub - manateelazycat/fingertip: Fingertip is struct edit plugin that base on treesit , fingertip 是类似插件, 只不过基于 Emacs 内置的 treesit API.
猫大会迁移这个项目么:GitHub - manateelazycat/recursive-search-references: Find function references in directory
我所有关于 tree-sitter 的项目今天下午都迁移完成了:
grammatical-edit => fingertip , 这样保持兼容性, 两个包分别对应 tree-sitter 和 treesit
awesome-tray, find-orphan, recursive-search-references 全部都升级了。
tree-sitter 和 treesit 的每个API的名字都不一样, treesit 总体来说写代码简化了, 目前只是替换了名字, 功能应该都是一样的。
我前几天刚下来用了一下,发现是外部tree-sitter,刚翻进去看了一下,确实更新了,惊喜~
我一会儿去试下fingertip, 还没用过。
感谢
今天下午刚好有空, 研究了一下 treesit , 内置确实比较快, 而且 bug 少很多。
欢迎反馈升级后的问题。
我之前还尝试把recursive-search-references转成内部treesit,能力有限,半途而废了。
其实主要是 recursive-search-references-get-match-nodes, tree-sitter 的时候, 是我自己用 tsc-make-query、 tsc-root-node 和 tsc-query-captures 拼接来实现查找buffer中所有的规则节点。
treesit 中没有对应的等价API, 但是发现 treesit-query-range 配合 treesit-node-at 也可以, 更简单一点。
awesome-tray 和 find-orphan 也是同样的移植难点。
简单试用了一下,没发现这个插件的亮点呢,是我姿势不对吗?
还是说 能替代 哪个插件吗?
thing-edit 我倒是使用频率很高。
更全面的paredit功能,对web模式特别友好
好奇提问,如果要开发基于tree-sitter的插件需要了解哪些知识(比如编译原理之类?),还是只看e macs内置的treesit的文档就可以了?
只用看 treesit 的API就好了。
可能要看看grammar里有没有定义吧