代码搜索与重构工具 - Code Recycle
程序员在开发过程中查询代码时,通常依赖文本搜索,尽管这在大多数情况下很有用,但它可能无法完全满足我们的需求.let a = 1;let b=`let a=1`
要搜索上述代码语句let a = 1
,通常这是很难实现的,因为一方面会有字符串的干扰,另一方面格式可能不同,无法直接确定唯一语句.
但是,当我们使用code recycle
时,我们可以直接使用let a=1
来匹配这个语句,因为它是基于语法树来进行匹配的.一个特点是它对空白内容不敏感,另一个特点是所有字符都被视为节点内容进行查询.
这样,我们就可以使用与原来相同的搜索内容,匹配到更準确的结果
快速交换参数?
如果想交换函数调用的参数,可能就是一个大工程,需要检查每个函数的调用,并手动处理两个参数的位置如果说只用几行代码就能交换所有代码,是不是更方便呢?没错,在code-recycle
中你可以这麽写 { query: `CallExpression:like(test1( [[{^]] [[$p1]] [[...]] [[$p4]] [[$}]] ) )`, multi: true, replace: { p1: `{{''|ctxInferValue:'p4'}}`, p4: `{{''|ctxInferValue:'p1'}}`, }, },
上面演示的将第一个和最后一个参数交换,如果你已经确定了参数数量,那麽写法还可以更简单改写传参结构?
当设计发生变动时,通常需要修改传参结构,将以前的参数放到新的结构中.这时你可以这麽做{ query: `CallExpression:like(test1( [[{^]] [[...]] [[$p4]] [[$}]] ) )`, multi: true, replace: { p4: `{value:{{''|ctxInferValue:'p4'}}}`, },}
最后一个参数变成一个对象,而原来参数值将会在对象中其他用途
console.[[$method:/log|info/]]()
查询console
的指定调用方法class [[$className]] { [[{]] test(){} [[}]] }
查询包含 test 方法的类{key:[[$value]]}
查询key的值更多?
工具目前支持CLI
与VSCode Extension
进行执行,脚本支持yaml
/js
/ts
上面的例子是以typescript
脚本语言为例介绍code recycle
的基础用法,工具目前支持400多种语言/语法解析,你可以查看文档了解更多如果你想看更多的实例,可以访问仓库查看并运行如果你已经感兴趣,那麽可以快速开始