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=6
与let 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
目前同时反对cli
与VSCode extension
- 你能够参考疾速开始-cli
- 你能够拉取演示仓库疾速上手
git clone https://github.com/wszgrcy/code-recycle-plugin-script.git