5 releases (3 breaking)

✓ Uses Rust 2018 edition

0.4.0 Aug 21, 2019
0.3.0 Jun 21, 2019
0.2.0 May 24, 2019
0.1.1 May 20, 2019
0.1.0 May 16, 2019

#35 in Build Utils

Download history 46/week @ 2019-12-02 57/week @ 2019-12-09 18/week @ 2019-12-16 36/week @ 2019-12-23 37/week @ 2019-12-30 49/week @ 2020-01-06 61/week @ 2020-01-13 41/week @ 2020-01-20 23/week @ 2020-01-27 27/week @ 2020-02-03 23/week @ 2020-02-10 34/week @ 2020-02-17 47/week @ 2020-02-24 19/week @ 2020-03-02 47/week @ 2020-03-09 52/week @ 2020-03-16

137 downloads per month

MIT license

700KB
658 lines

cargo-play

Build Status Crates.io

cargo-play is a tool to help you running your Rust code file without manually setting up a Cargo project.

See it in action

Install

cargo install cargo-play

Usage

Simply running cargo play <files> is sufficient. You can specify your external dependency at the beginning of your file with the prefix //#. It accepts the same TOML syntax as in Cargo.toml.

Example

$ cat serde_json.rs
//# serde_json = "*"

use serde_json::{Result, Value};

fn main() -> Result<()> {
    // Some JSON input data as a &str. Maybe this comes from the user.
    let data = r#"
        {
            "name": "John Doe",
            "age": 43,
            "phones": [
                "+44 1234567",
                "+44 2345678"
            ]
        }"#;

    // Parse the string of data into serde_json::Value.
    let v: Value = serde_json::from_str(data)?;

    // Access parts of the data by indexing with square brackets.
    println!("Please call {} at the number {}", v["name"], v["phones"][0]);

    Ok(())
}

$ cargo play serde_json.rs
    Updating crates.io index
   Compiling serde v1.0.91
   Compiling ryu v0.2.8
   Compiling itoa v0.4.4
   Compiling serde_json v1.0.39
   Compiling gvzcg8yviqmd_euq3xti4-zbkrs v0.1.0 (/var/folders/nq/608n9lcx02n_mzx33_3z5wyw0000gn/T/cargo-play.GVzCg8yviQmd_EUq3Xti4-ZbKRs)
    Finished dev [unoptimized + debuginfo] target(s) in 10.23s
     Running `/var/folders/nq/608n9lcx02n_mzx33_3z5wyw0000gn/T/cargo-play.GVzCg8yviQmd_EUq3Xti4-ZbKRs/target/debug/gvzcg8yviqmd_euq3xti4-zbkrs`
Please call "John Doe" at the number "+44 1234567"

It also supports running multiple files at the same time:

$ cat tests/multi/entry.rs
mod hello;

fn main() {
    println!("Hello {}", hello::world());
}
$ cat tests/multi/hello.rs
pub fn world() -> String {
    "World".into()
}
$ cargo play tests/multi/*
   Compiling qvsjdw04fxh5cgpdkdvg6ite_ak v0.1.0 (/var/folders/nq/608n9lcx02n_mzx33_3z5wyw0000gn/T/cargo-play.QVSJDw04FxH5CGpDkDvg6itE_ak)
    Finished dev [unoptimized + debuginfo] target(s) in 0.30s
     Running `/var/folders/nq/608n9lcx02n_mzx33_3z5wyw0000gn/T/cargo-play.QVSJDw04FxH5CGpDkDvg6itE_ak/target/debug/qvsjdw04fxh5cgpdkdvg6ite_ak`
Hello World

Files under sub-directories will be copied and placed relatively to the first file. Try:

cargo play tests/subdirs/**/*.rs

To Do

  • Editor plugins
    • Vim
    • VS Code
  • Toolchain supports
  • Edition Support

Editor Support

Vim

Add this line to your .vimrc or init.vim:

command CargoPlay !cargo play %

With your code file open, running :CargoPlay will allow you to test your current file within an auto-generated cargo project.

Acknowledgements

This project is inspired by play.rust-lang.org and RustPlayground.

Dependencies

~3MB
~56K SLoC