#!/bin/sh # 项目完整检查入口,供开发者或 CI 调用;下方 Cargo 测试和 lint 会触发编译。 # 启用首个失败即退出和未定义变量报错,避免前置检查失败后继续报告后续成功。 set -eu # 比较 ASDL 对应的已提交生成源码/契约是否过期;只检查,不写目标文件,内部会格式化 Rust 文本。 python3 scripts/generate_ast.py --check # 运行生成器的纯 Python 回归场景,验证递归装箱、跨目标同步及非法 schema 拒绝。 python3 scripts/test_generate_ast.py # 检查整个 Rust workspace 格式,不改文件;不运行 VM。 cargo fmt --all --check # 单独检查 include 引入的两个 PEG 文件格式,补足普通 Cargo 源码格式检查的覆盖。 rustfmt --edition 2024 --check crates/frontend/src/lexer.peg crates/frontend/src/grammar.peg # 编译并运行 workspace 测试,locked 要求使用已锁定依赖;这一步会产生构建产物。 cargo test --workspace --locked # 对全部目标执行 Clippy,包含编译检查,并把所有警告作为错误拒绝。 cargo clippy --workspace --all-targets --locked -- -D warnings