- 程序员在开发过程中查询代码时,通常依赖文本搜索,尽管这在大多数情况下很有用,但它可能无法完全满足我们的需求.
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多种语言/语法解析,你可以查看文档了解更多 - 如果你想看更多的实例,可以访问仓库查看并运行
- 如果你已经感兴趣,那么可以快速开始
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。