大家好,最近使用ast-grep来按结构搜索需要重构的代码的情况比较多,很想在emacs里结合consult之类的插件使用,于是自己动手尝试写了emacs插件。在此分享给和我有相同需求的伙伴们。repo链接
这是我第一次写emacs插件,有很多最佳实践并不清楚,如果有做的不好的地方请大伙指正。
大家好,最近使用ast-grep来按结构搜索需要重构的代码的情况比较多,很想在emacs里结合consult之类的插件使用,于是自己动手尝试写了emacs插件。在此分享给和我有相同需求的伙伴们。repo链接
这是我第一次写emacs插件,有很多最佳实践并不清楚,如果有做的不好的地方请大伙指正。
能不能分享一下,你使用时,什么地方让你感到无比爽快
ast-grep的使用场景类似比如我想找到类似 $A && $A()
结构的代码,并把它们重构为 $A?.()
这时候就很想有类似consult-ripgrep
的体验:可以在emacs里live preview搜索结果,并且按path filter之类的。
目前这个插件还只能搜索,但是ast-grep本身是支持替换的,之后还想增加replace的命令,让用户可以对每个搜索结果进行live preview再决定要不要replace,不过我还没想好怎么交互。
可以参考 color-rg.el 的设计
感觉操作ast难的问题在于怎么写pattern,没有统一的表示法,ast-grep的表示法给我的感觉更像是反向搜snippet。
auto (enum)
snippets → code
↑ auto(id) ↘ auto (recurse)
ast of patterns ← ast
?
还有一个问题是pattern匹配到的一般不止一行,基于行的grep可以用行过滤工具对付边角情况,对语法结构做同样的手工过滤可能需要预先做额外的变换。
总之,感觉非递归的交互做不来。