扫描(code-scan)
yak code-scan 适合“我现在就要一份扫描报告”的场景。
它会把“编译 + 扫描 + 报告导出”串成一条命令。
实测说明(2026-03-04):本页命令和输出示例已在
syntaxflow-zero-to-hero项目实测。
1. 快速开始(syntaxflow-zero-to-hero)
1.1 克隆示例项目
git clone https://github.com/yaklang/syntaxflow-zero-to-hero
cd syntaxflow-zero-to-hero
1.2 执行扫描
yak code-scan \
-t ./lesson-1-hello-world \
-l java \
--rule-keyword java \
--format sarif \
-o lesson1-keyword \
--memory
参数说明:
-t ./lesson-1-hello-world:扫描示例目录--rule-keyword java:筛选 Java 相关规则--format sarif -o lesson1-keyword:输出 SARIF 报告--memory:内存模式,运行更轻量
1.3 你会看到什么输出
执行过程中会看到规则进度和汇总(节选):
[INFO] [code-scan] mode: compile + scan via syntaxflow_scan.StartScan
[Task ...]
status=done progress=100.00%
Failed=0 Skipped=13 Success=126 Finished=139 Total=139 Risk=3
...
Scan Summary
| Failed Rules | 0 |
| Risk Count | 3 |
| Success Rules | 126 |
| Total Rules | 139 |
首次运行时还会出现大量 sync embed rule 日志,这是内置规则同步过程,属于正常现象。
你可以这样判断:
status=done progress=100.00%:本次 扫描结束Risk Count:命中的风险数量- 输出文件会自动补全后缀,示例里会生成
lesson1-keyword.sarif
1.4 快速查看报告文件
ls -lh lesson1-keyword.sarif
2. 其他常用扫描方式
2.1 扫描已编译 Program
如果你想复用已编译 Program,建议先用一个“唯一名称”编译,避免名称模糊匹配:
yak ssa-compile -t ./lesson-1-hello-world -p lesson1_program_only -l java --re-compile
yak code-scan -p lesson1_program_only -o result.sarif --format sarif
输出示例(节选):
status=done progress=100.00%
Failed=0 Skipped=100 Success=127 Finished=227 Total=227 Risk=3
...
Scan Summary
| Risk Count | 3 |
| Total Rules | 227 |