我正在使用 ast-grep,一个用于代码结构搜索和重写的 CLI 工具,来查找和替换代码中的某些模式。我编写了一个带有一些重写规则的 YAML 文件,我可以使用
sg scan
在终端中查看匹配和替换。但是,我不确定如何自动将更改应用到原始文件,而不需要手动编辑它。
这是我的 YAML 文件的示例
rule.yaml
:
id: replace-var-with-let
language: js
rule:
pattern: var $A = $B
fix: let $A = $B
这是我的测试文件的示例
test.js
:
var x = 10;
var y = 20;
var z = x + y;
console.log(z);
这是
sg scan
的输出:
sg scan -r rule.yaml test.js
test.js
help[replace-var-with-let]:
@@ -0,4 +0,4 @@
1 │-var x = 10;
1│+let x = 10
2 2│ var y = 20;
3 3│ var z = x + y;
4 4│ console.log(z);
help[replace-var-with-let]:
@@ -0,4 +0,4 @@
1 1│ var x = 10;
2 │-var y = 20;
2│+let y = 20
3 3│ var z = x + y;
4 4│ console.log(z);
help[replace-var-with-let]:
@@ -0,4 +0,4 @@
1 1│ var x = 10;
2 2│ var y = 20;
3 │-var z = x + y;
3│+let z = x + y
4 4│ console.log(z);
如何让ast-grep直接修改代码文件,使其变成:
let x = 10;
let y = 20;
let z = x + y;
console.log(z);
我使用ast-grep版本0.19.0,JavaScript作为编程语言,Mac OSX作为操作系统。
ast-grep 不会直接修改文件,但会将修改后的代码打印到终端。您可以使用
--update-all
或 -U
标志将更改写入文件。请参阅重写指南。这类似于 eslint --fix
选项或 prettier -w
以下是将更改应用到文件的命令:
$ sg scan -r rule.yaml test.js -U
# or
$ sg scan -r rule.yaml test.js --update-all
有关更多信息,您可以查看命令行参考
https://ast-grep.github.io/reference/cli/scan.html#u-update-all