#cli #cargo #tool #command-line #script

app rspit

A command-line tool to run Rust snippet

8 releases

0.3.2 Feb 22, 2023
0.3.1 Dec 28, 2022
0.2.2 Dec 1, 2022
0.2.1 Nov 29, 2022
0.1.1 Nov 28, 2022

#210 in Command line utilities

MIT license

727 lines


Run Rust snippet containing multiple packages. Embed Cargo.toml as a comment to avoid special formatting.

  • Run snippet in debug mode
  • Build packages in snippet in release mode and distribute the artifacts to the directory
  • Extract packages in snippet as independent packages

There is a simple cache system, as described below.


  • rust-analyzer supports single file

    Snippet on VSCode

  • A large number of packages in one workspace makes rust-analyzer heavy. rust-analyzer's functionality is limited when opening single file, but it is very lightweight

    • However, I believe it has sufficient functionality to write a snippet because it can complement the standard library
    rust-analyzer completion


$ 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"]);


$ 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]

  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)

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


  • The target directory is cached
  • Always build in debug mode when run and build are executed
  • If the source files have not been modified at the time of run execution and debug mode artifacts are present, the binary is executed directly without building


PIT is released under the MIT License


~94K SLoC