116 个版本 (25 个破坏性更新)
新版本 0.26.2 | 2024 年 8 月 18 日 |
---|---|
0.25.7 | 2024 年 8 月 5 日 |
0.25.4 | 2024 年 7 月 26 日 |
0.20.2 | 2024 年 3 月 27 日 |
0.1.0 | 2022 年 7 月 7 日 |
103 在 开发工具 中
每月下载量 2,615
用于 sljit-sys
660KB
19K SLoC
ast-grep(sg)
ast-grep(sg) 是一个 CLI 工具,用于代码结构搜索、代码检查和重写。
简介
ast-grep 是一个基于 AST 的工具,通过模式代码搜索代码。想象一下,它是你的老朋友 grep
,但它匹配 AST 节点而不是文本。你可以像写普通代码一样编写模式。它会匹配具有相同语法结构的所有代码。你可以使用 $
符号 + 大写字母作为通配符,例如 $MATCH
,来匹配任何单个 AST 节点。把它想象成 REGEX 点 .
,但不是文本。
尝试在线 游乐场 来体验一下!
演示
在 网站 上查看更多截图。
安装
您可以从 npm、pip、cargo、homebrew、scoop 或 MacPorts 安装它!
npm install --global @ast-grep/cli
pip install ast-grep-cli
cargo install ast-grep --locked
# install via homebrew, thank @henryhchchc
brew install ast-grep
# install via scoop, thank @brian6932
scoop install main/ast-grep
# install via MacPorts
sudo port install ast-grep
或者,您可以从源代码构建 ast-grep。您需要安装 rustup,克隆仓库,然后
cargo install --path ./crates/cli --locked
命令行使用示例
ast-grep具有以下形式。
sg --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
示例
sg -p '$A && $A()' -l ts -r '$A?.()'
sg -p 'new Zodios($URL, $CONF as const,)' -l ts -r 'new Zodios($URL, $CONF)' -i
赞助商
如果您觉得ast-grep对您的工作有趣且有用,请买我一杯咖啡,这样我可以花更多时间在这个项目上!
功能亮点
ast-grep的核心是基于tree-sitter生成的抽象语法树进行代码搜索和替换的算法。它可以以直观的方式帮助您进行轻量级静态分析和大规模代码操作。
关键亮点
-
一个直观的模式来查找和替换AST。ast-grep的模式看起来像您每天都会编写的普通代码(可以说模式与代码同构)。
-
AST遍历和操作的类似jQuery的API。
-
使用YAML配置来编写新的linting规则或代码修改。
-
使用编译语言编写,基于tree-sitter解析并利用多个核心。
-
美观的命令行界面 :)
ast-grep的愿景是使抽象语法树的魔法民主化,并解放人们从繁琐的AST编程中!
- 如果您是开源库的作者,ast-grep可以帮助您的库用户更容易地采用破坏性变更。
- 如果您是您的团队中的技术负责人,ast-grep可以帮助您执行符合您业务需求的代码最佳实践。
- 如果您是安全研究员,ast-grep可以帮助您更快地编写规则。
依赖关系
~19–34MB
~542K SLoC