关于搜索:coderecycle-可能是目前支持语言最多的语法查询

20次阅读

共计 1133 个字符,预计需要花费 3 分钟才能阅读完成。

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

正文完
 0