如何用 rustlings dev new 创建自己的社区练习项目并用 dev check 校验?
【免费下载链接】rustlings:crab: Small exercises to get you used to reading and writing Rust code!项目地址: https://gitcode.com/gh_mirrors/ru/rustlings
Rustlings 内置了对社区练习(community exercises)的支持,你可以用它做两件事:围绕某个特定主题编写一套自己的练习,或者把官方练习翻译成其他语言并发布。这篇文章的任务是:从零创建一个新的社区练习项目目录,添加第一个练习,然后运行rustlings dev check完成校验,得到Everything looks fine!的通过结果。整个过程只需要你已经安装好的rustlings程序本身,社区练习和官方练习用的是同一个程序。
前置条件:安装 Rust 与 Rustlings
在开始之前,按照安装说明准备环境:
- 安装最新版本的 Rust(会同时安装 Cargo)。Linux 用户需要
gcc作为链接器(Debian:sudo apt install gcc;Fedora:sudo dnf install gcc);macOS 用户需要 Xcode 及其开发者工具:xcode-select --install。 - 安装 Rustlings:
cargo install rustlings如果安装失败,文档给出的排查路径是:先用rustup update确认 Rust 是最新版本;再尝试带--locked标志的cargo install rustlings --locked。如果之后运行rustlings提示找不到命令,多半是~/.cargo/bin不在PATH中,把它加入PATH即可。
用 rustlings dev new 生成项目目录
在你想创建项目的位置运行:
rustlings dev new PROJECT_NAME其中PROJECT_NAME替换为你要使用的目录名,例如你的项目名。命令行为类似于cargo new PROJECT_NAME:创建模板目录并写入开始开发所需的全部文件。注意这条命令有明确的副作用——它会在当前目录下创建新目录,并默认执行git init初始化一个 Git 仓库;如果不想初始化仓库,加--no-git参数即可(参数定义见 dev 子命令)。
执行成功后会看到Initialization done ✓的输出。生成的项目包含以下文件(见 dev new 实现):
info.toml:练习元数据文件,文件内带有大量注释说明格式,务必通读一遍。Cargo.toml:练习项目的清单文件,bin列表初始为空。exercises/:练习源码目录。solutions/:可选的解答文件目录。README.md、rust-analyzer.toml、.vscode/extensions.json、.gitignore。
info.toml中可以设置:
format_version:社区练习的格式版本,指示与 Rustlings 程序的兼容性。它不是 Rustlings 程序的版本号,但当 Rustlings 对社区练习格式做出不可避免的破坏性变更时,你需要提高这个版本并适配新格式,否则新版 Rustlings 无法运行这些练习。welcome_message/final_message:可选的多行消息,分别显示在用户开始和完成全部练习时。- 每个练习一段
[[exercises]]元数据。
添加第一个练习
在info.toml中填入一个练习的元数据。以下是社区练习文档给出的示例:
[[exercises]] name = "intro1" hint = """ To finish this exercise, you need to … These links might help you …"""生成文件中的注释解释了各字段:
name:练习文件名(不含.rs扩展名)。dir(可选):如果想按目录组织练习,指定目录名后练习路径为exercises/DIR/NAME.rs,否则为exercises/NAME.rs。test(可选):默认为true。Rustlings 期望练习包含测试并会运行它们;设为false后练习只要编译成功就算完成。strict_clippy(可选):默认为false。Rustlings 总会运行 Clippy,设为true后只有没有任何警告才算完成。hint:用户请求时显示的多行提示。
元数据填好后,在exercises/目录下创建intro1.rs。根据 dev check 的实现,练习文件需要满足:
- 包含
main函数(可以为空); - 至少有一个
// TODO注释来指引用户; - 包含
#[test]标注的测试(文档建议添加测试);如果不想写测试,把该练习的test设为false。
一个满足这些要求的最小骨架(示例,注释和测试内容需你自行补全):
// TODO: 告诉用户这一步要做什么 fn main() { } #[test] fn test_exercise() { }可选地,你可以在solutions/目录下添加同名解答文件(例如solutions/intro1.rs)。官方仓库的练习本身可以作为编写练习的参考。
用 rustlings dev update 同步 Cargo.toml
Cargo.toml中的bin列表由工具自动维护,不要手工编辑。每添加或删除练习后运行:
rustlings dev update它会根据info.toml重写bin列表(见 dev update 实现)。bin列表之外的部分可以按需修改:在[dependencies]表里添加依赖,在[lints.rust]和[lints.clippy]表里为所有练习配置 lints。
用 rustlings dev check 校验项目
进入项目目录,运行:
rustlings dev checkdev check依次检查以下内容(检查逻辑见 src/dev/check.rs),任何一项不通过都会报错退出:
format_version必须等于当前受支持的格式版本。过低会提示迁移到最新版本,过高则提示升级 Rustlings 程序。Cargo.toml的bin列表必须与info.toml一致。- 练习元数据:名字非空、不超过 32 个字符、只允许字母数字和下划线、不能重复;
hint不能为空;指定了dir时目录名同样有字符限制。 - 练习文件内容:必须有
fn main()、至少一个// TODO注释;test为true(默认)时文件必须包含#[test]测试,反过来设了test = false的文件里不能出现#[test]。 exercises/和solutions/目录中只允许README.md和info.toml声明的练习/解答文件,且只允许一层目录嵌套。- 运行所有练习,确认它们尚未被解答。
- 运行所有解答文件(如果存在),并检查其通过
rustfmt格式化。
全部通过后输出Everything looks fine!,这就是校验成功的标志。此外,rustlings dev check还有--require-solutions选项,要求每个练习都必须有解答文件。
常见报错与对应处理
以下报错文本来自dev check的实际实现,遇到时按提示操作:
| 报错信息(节选) | 处理方式 |
|---|---|
The fileCargo.tomlis outdated. Runrustlings dev updateto update it. Then runrustlings dev checkagain | 运行rustlings dev update后重新执行rustlings dev check |
`format_version` < ... (supported version) Please migrate to the latest format version | 把info.toml的format_version升级到受支持版本 |
`format_version` > ... (supported version) Try updating the Rustlings program | 升级 Rustlings 程序 |
Themainfunction is missing in the file ... | 为练习文件补上至少一个空的fn main() |
Didn't find any// TODOcomment in the file ... | 在练习文件中添加至少一个// TODO注释 |
The file ... doesn't contain any tests. If you don't want to add tests ... settest = false... | 添加#[test]测试,或在info.toml中将该练习设为test = false |
The exercise ... is already solved. ... addskip_check_unsolved = true... | 如果这是故意预先写好的入门练习,在该练习元数据中加skip_check_unsolved = true;否则说明练习本身写成了已完成状态 |
Some solutions aren't formatted. Runrustfmton them | 对解答文件运行rustfmt |
解答文件运行失败(会先打印Running all solutions...及失败输出) | 修复该解答文件中的编译或测试错误 |
发布与分享(可选)
校验通过后,可以继续添加更多练习,然后把项目发布为一个 Git 仓库。使用者只需克隆仓库并在目录内运行rustlings就能开始做你的练习。与官方练习有一个区别:解答文件不会在用户完成练习前被隐藏,需要你自己信任使用者不会过早打开解答。发布后,可以在官方 Rustlings 仓库提 issue 或 pull request,把项目加入社区练习列表。
至此,一条完整的操作路径是:rustlings dev new生成项目 → 编辑info.toml并编写练习文件 →rustlings dev update同步bin列表 →rustlings dev check校验,看到Everything looks fine!即表示项目结构和练习内容都符合要求,可以发布。
【免费下载链接】rustlings:crab: Small exercises to get you used to reading and writing Rust code!项目地址: https://gitcode.com/gh_mirrors/ru/rustlings
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考