ast-grep.el:在emacs中结构化搜索代码的插件

大家好,最近使用ast-grep来按结构搜索需要重构的代码的情况比较多,很想在emacs里结合consult之类的插件使用,于是自己动手尝试写了emacs插件。在此分享给和我有相同需求的伙伴们。repo链接

这是我第一次写emacs插件,有很多最佳实践并不清楚,如果有做的不好的地方请大伙指正。

5 个赞

能不能分享一下,你使用时,什么地方让你感到无比爽快

ast-grep的使用场景类似比如我想找到类似 $A && $A() 结构的代码,并把它们重构为 $A?.()

这时候就很想有类似consult-ripgrep的体验:可以在emacs里live preview搜索结果,并且按path filter之类的。

目前这个插件还只能搜索,但是ast-grep本身是支持替换的,之后还想增加replace的命令,让用户可以对每个搜索结果进行live preview再决定要不要replace,不过我还没想好怎么交互。

可以参考 color-rg.el 的设计

1 个赞

感觉操作ast难的问题在于怎么写pattern,没有统一的表示法,ast-grep的表示法给我的感觉更像是反向搜snippet。

        auto (enum)
snippets  →  code 
  ↑ auto(id)     ↘ auto (recurse)
ast of patterns ← ast
                 ?

还有一个问题是pattern匹配到的一般不止一行,基于行的grep可以用行过滤工具对付边角情况,对语法结构做同样的手工过滤可能需要预先做额外的变换。

总之,感觉非递归的交互做不来。

1 个赞