#命令行工具 #脚本 #命令行 #工具 #cargo #调试模式 #cargo-toml

构建 rspit

运行 Rust 代码片段的命令行工具

8 个版本

0.3.2 2023年2月22日
0.3.1 2022年12月28日
0.2.2 2022年12月1日
0.2.1 2022年11月29日
0.1.1 2022年11月28日

#195 in 构建工具

Download history 17/week @ 2024-06-30 59/week @ 2024-07-28

每月下载量 75

MIT 许可协议

1MB
727 代码行

PIT

运行包含多个包的 Rust 代码片段。将 Cargo.toml 作为注释嵌入以避免特殊格式化。

  • 以调试模式运行代码片段
  • 以发布模式构建代码片段中的包并将工件分发到目录
  • 将代码片段中的包提取为独立的包

存在一个简单的缓存系统,详情见下文

动机

用法

$ cargo install rspit
# omitted

$ cat ./snippet.rs
//# [package]
//# name = "rand"
//# version = "0.1.0"
//# edition = "2021"
//#
//# [dependencies]
//# rand = "*"

use rand::prelude::*;

fn main() {
    let num: u64 = random();
    println!("num: {}", num);
}

//# ---

//# [package]
//# name = "json"
//# version = "0.1.0"
//# edition = "2021"
//#
//# [dependencies]
//# serde_json = "*"

use serde_json::{Result, Value};

fn main() -> Result<()> {
    let json = r#"
{
    "name": "Alice",
    "age": 42
}
"#;
    let json: Value = serde_json::from_str(json)?;
    println!("name: {}, age: {}", json["name"], json["age"]);

    Ok(())
}

$ pit run ./snippet.rs
# omitted cargo log messages
Run rand package
num: 17349477736480811228
# omitted cargo log messages
Run json package
name: "Alice", age: 42
$ pit --help
A command-line tool to run Rust snippet.

Usage: pit [COMMAND]

Commands:
  check    Check all package in file
  build    Build all package in file
  run      Run all package in file
  release  Build all package in file in release mode and copy the artifacts to the target directory
  init     Create a new file
  list     List all packages in the given file
  add      Add an empty package on top in the given file
  extract  Extract the package from file
  clean    Remove everything in the cache directory
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help information
  -V, --version  Print version information

注意

  • target 目录被缓存
  • 当执行 runbuild 时,始终以 调试模式 构建
  • 如果在 run 执行时源文件未被修改并且存在调试模式工件,则直接执行二进制文件而不进行构建

许可协议

PIT 在 MIT 许可协议下发布

依赖项

~4.5MB
~86K SLoC