code-recycle: 可能是目前反对语言最多的语法查问

  • 400+种的语法解析
  • like/selector两种查问模式
  • 链式查问;多层级解决
  • 依据拓展名主动确定文件语言

一般查问

  • 依据文本进行查问;通过正则表达式查问
  • 尽管下面两种查问形式在大多数状况下通用性十分强,然而在一些特定状况下就顾此失彼了

比方,查问上面代码中 A 类蕴含的 count 的类型

class A{    value:string    count:number}

语法查问 - code recycle

  • 你能够间接应用 like 查问模式 class A{ [[{]] count: [[$var]] [[}]] },将会间接匹配到 count 的类型并保留到var变量中供应用
  • 或者应用 selector 模式 ClassDeclaration:has(>Identifier[value=A]) PropertyDeclaration:has(>[value=count])>NumberKeyword:infer(var) 同样会保留到var变量中

like查问模式

  • like 模式在大多数状况下都与一般文本一样,只不过能够忽视格式化带来的影响,let a=6let a = 6在like模式下会被解析为一种语法树,所以不必放心匹配的内容会被格局影响

selector 查问模式

  • 应用 css选择器抉择节点,确定上下文关系查问

    selector外部能够通过:like(xx)调用like模式

残缺的查问上下文

  • 不止是进行一次查问,code recycle目前能够一次进行多种不同文件查问,每一次查问后果能够作为下一次查问的范畴,调用曾经查问到的后果,进行 新增/批改/删除
[        {            name: 'file1',            path: './def1.ts', list: [                {                    query: `LetKeyword`,                    callback: (context) => {                        context.data = context.getNodeValue()                    },                },                {                    query: `let a=[[$var]]`,                    replace:{var:'7'},mode:'like'                              }            ]        }, {            path: './def2.ts', list: [                {                    query: `Identifier`,                    callback: async (context) => {                        return util.setChange.contextNode(context, context.getContext('root.file1.0').data)                    },                }            ]        }]

如何应用?

  • code-recycle目前同时反对cliVSCode extension
  • 你能够参考疾速开始-cli
  • 你能够拉取演示仓库疾速上手
git clone https://github.com/wszgrcy/code-recycle-plugin-script.git