#cargo #cargo-toml #file #play #up #setting #tool

bin+lib cargo-play

在不设置Cargo的情况下运行您的Rust代码

9个不稳定版本

0.5.1 2022年3月4日
0.5.0 2021年2月20日
0.4.2 2020年7月26日
0.4.1 2020年6月15日
0.1.1 2019年5月20日

Cargo插件中排名第273

Download history 32/week @ 2024-03-13 38/week @ 2024-03-20 52/week @ 2024-03-27 102/week @ 2024-04-03 63/week @ 2024-04-10 39/week @ 2024-04-17 61/week @ 2024-04-24 43/week @ 2024-05-01 32/week @ 2024-05-08 49/week @ 2024-05-15 44/week @ 2024-05-22 61/week @ 2024-05-29 57/week @ 2024-06-05 58/week @ 2024-06-12 48/week @ 2024-06-19 77/week @ 2024-06-26

每月下载量259

MIT许可

2MB
663

包含(ZIP文件,580KB) 扩展名/cargo-play-0.0.1.vsix

cargo-play

Build Status Crates.io

cargo-play是一个工具,可以帮助您在没有手动设置Cargo项目的情况下运行Rust代码文件。

查看实际效果

安装

cargo install cargo-play

用法

只需运行cargo play <files>即可。您可以在文件开头使用前缀//指定外部依赖项。它接受与Cargo.toml相同的TOML语法。

示例

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

它还支持同时运行多个文件

$ 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

子目录下的文件将被复制并放置在第一个文件的相关位置。试试

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

待办事项

  • 编辑器插件
    • Vim
    • VS Code
  • 工具链支持
  • 版本支持

编辑器支持

Vim

将此行添加到您的.vimrcinit.vim

command! CargoPlay !cargo play %

当您的代码文件打开时,运行:CargoPlay将允许您在自动生成的Cargo项目中测试当前文件。

VSCode

安装VSCode扩展

或者

打开命令面板并选择配置任务

  • 这将创建新的tasks.json或打开现有的tasks.json

添加以下任务

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "CargoPlay",
            "command": "cargo",
            "args": [
                "play",
                "${file}",
            ],
            "problemMatcher": [
                "$rustc"
            ]
        }
    ]
}

现在打开命令面板,选择运行任务,然后运行新的CargoPlay任务

Micro

将其添加到您的micro ~/.config/micro/init.lua

local config = import("micro/config")
local shell = import("micro/shell")

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

然后您可以按下 Alt + b构建 当前文件,使用 cargo play,或者您可以使用 Ctrl + E 并在命令行中输入 cargoplay

致谢

本项目灵感来源于 play.rust-lang.orgRustPlayground

依赖项

~2.3–3MB
~55K SLoC