头图
  • 程序员在开发过程中查询代码时,通常依赖文本搜索,尽管这在大多数情况下很有用,但它可能无法完全满足我们的需求.
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'}}`,
    },
   },

switch

  • 上面演示的将第一个和最后一个参数交换,如果你已经确定了参数数量,那么写法还可以更简单

改写传参结构?

  • 当设计发生变动时,通常需要修改传参结构,将以前的参数放到新的结构中.
  • 这时你可以这么做
{
    query: `CallExpression:like(test1( [[{^]]  [[...]] [[$p4]] [[$}]] ) )`,
    multi: true,
    replace: {
      p4: `{value:{{''|ctxInferValue:'p4'}}}`,
    },
}
  • 最后一个参数变成一个对象,而原来参数值将会在对象中

其他用途

  • console.[[$method:/log|info/]]() 查询console的指定调用方法
  • class [[$className]] { [[{]] test(){} [[}]] }查询包含 test 方法的类
  • {key:[[$value]]}查询key的值

更多?

  • 工具目前支持CLIVSCode Extension进行执行,脚本支持yaml/js/ts
  • 上面的例子是以typescript脚本语言为例介绍code recycle的基础用法,工具目前支持400多种语言/语法解析,你可以查看文档了解更多
  • 如果你想看更多的实例,可以访问仓库查看并运行
  • 如果你已经感兴趣,那么可以快速开始

wszgrcy
25 声望10 粉丝

我说我懂Angular,你们信吗