cargo-play
is a tool to help you running your Rust code file without manually setting up a Cargo project.
cargo install cargo-play
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
.
```rust $ cat serdejson.rs //# serdejson = "*"
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 serdejson.rs
Updating crates.io index
Compiling serde v1.0.91
Compiling ryu v0.2.8
Compiling itoa v0.4.4
Compiling serdejson v1.0.39
Compiling gvzcg8yviqmdeuq3xti4-zbkrs v0.1.0 (/var/folders/nq/608n9lcx02nmzx333z5wyw0000gn/T/cargo-play.GVzCg8yviQmdEUq3Xti4-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:
```rust $ 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 qvsjdw04fxh5cgpdkdvg6iteak v0.1.0 (/var/folders/nq/608n9lcx02nmzx333z5wyw0000gn/T/cargo-play.QVSJDw04FxH5CGpDkDvg6itEak)
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
Add this line to your .vimrc
or init.vim
:
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.
Install the VSCode Extension
OR
Open Command Palette and select Configure Task - This will either create a new tasks.json or open your existing tasks.json
Add the following task:
json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "CargoPlay",
"command": "cargo",
"args": [
"play",
"${file}",
],
"problemMatcher": [
"$rustc"
]
}
]
}
Now open the Command Palette, select Run Task and then run the new CargoPlay task
add this to your micro ~/.config/micro/init.lua
```lua local config = import("micro/config")
function init() config.TryBindKey("Alt-b", "lua:initlua.play", true) config.MakeCommand("cargoplay", play, config.NoComplete) end
function play(bp)
bp:Save()
if bp.Buf:FileType() == "rust" then
shell.RunInteractiveShell("cargo play " .. bp.Buf.Path, true, false)
end
end
```
Then you can hit Alt + b to build your current file usig cargo play
or you can use Ctrl + E and in the command console type cargoplay
This project is inspired by play.rust-lang.org and RustPlayground.