#repl #shell #interactive #interpreter #cli #command-arguments

easy-repl

一个易于使用的 REPL,适合需要创建临时 shell 的情况。

3 个不稳定版本

0.2.1 2022年7月13日
0.2.0 2022年7月13日
0.1.0 2021年5月17日

946命令行界面

Download history 1261/week @ 2024-03-13 1176/week @ 2024-03-20 1244/week @ 2024-03-27 1417/week @ 2024-04-03 1743/week @ 2024-04-10 1303/week @ 2024-04-17 1394/week @ 2024-04-24 1299/week @ 2024-05-01 1349/week @ 2024-05-08 1689/week @ 2024-05-15 1260/week @ 2024-05-22 650/week @ 2024-05-29 905/week @ 2024-06-05 993/week @ 2024-06-12 1153/week @ 2024-06-19 1198/week @ 2024-06-26

4,377 每月下载量
2 个 Crates 中使用(通过 routes

MIT/Apache

39KB
686

easy-repl crates.io docs.rs

一个易于使用的 REPL,适合需要创建临时 shell 的情况。

这是一个 Rust 库,它以快速便捷的方式为您的应用程序生成一个 REPL。它提供了一个易于使用的 command! 宏,该宏将自动验证和解析命令参数,为您完成所有类型检查。REPL 配有方便的帮助信息、输入验证、提示和自动补全。许多 REPL 功能都可以进行配置。

有关更多信息,请参阅 crate 文档和 examples/ 目录。


lib.rs:

一个易于使用的 REPL,适合需要创建临时 shell 的情况。

此库提供了为您的应用程序生成一个 REPL 的快速便捷方式。它提供了一个易于使用的 command! 宏,该宏将自动验证和解析命令参数,为您完成所有类型检查。REPL 配有方便的帮助信息、输入验证、提示和自动补全。许多 REPL 功能都可以进行配置。

示例

这是一个基本示例,对应于 examples/minimal.rs。有关更多示例,请参阅 examples/ 目录,其中包括如何处理错误、访问处理闭包外的变量以及如何在多个 REPL 中创建 REPL 的示例。

use easy_repl::{Repl, CommandStatus, command};

let mut repl = Repl::builder()
    .add("hello", command! {
        "Say hello",
        (name: String) => |name| {
            println!("Hello {}!", name);
            Ok(CommandStatus::Done)
        }
    })
    .add("add", command! {
        "Add X to Y",
        (X:i32, Y:i32) => |x, y| {
            println!("{} + {} = {}", x, y, x + y);
            Ok(CommandStatus::Done)
        }
    })
    .build().expect("Failed to create repl");

repl.run().expect("Critical REPL error");

生成的 REPL 可以用作

> hello world
Hello world!

它具有参数数量检查...

> add 1
Error: wrong number of arguments: got 1, expected 2
Usage: add X:i32 Y:i32
> hello easy repl
Error: wrong number of arguments: got 2, expected 1
Usage: hello name:String
> hello "easy repl"
Hello easy repl!

...以及类型检查!

> add 1 world
Error: failed to parse argument value 'world': invalid digit found in string
Usage: add X:i32 Y:i32

它包括自动的 helpquit 命令。帮助信息是自动生成的

> help
Available commands:
  add X:i32 Y:i32    Add X to Y
  hello name:String  Say hello

Other commands:
  help  Show this help message
  quit  Quit repl

默认情况下,用户不需要使用完整的命令名称,如果命令名称可以唯一解决(即前缀仅匹配单个命令),例如

> a 1 2
1 + 2 = 3

但如果输入有歧义,将打印出错误并提供命令建议

> h world
Command not found: h
Candidates:
  hello
  help
Use 'help' to see available commands.

REPL 默认情况下也自动实现了命令提示和TAB补全(参见 rustyline::hintrustyline::completion)。

依赖关系

~8–20MB
~236K SLoC