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