6个版本

0.1.5 2021年10月4日
0.1.4 2021年10月4日
0.1.3 2021年5月21日
0.1.2 2021年4月16日

命令行界面 中排名 936

MIT 许可证

155KB
3.5K SLoC

shi

Rust crates.io docs.rs

shi 是一个用于在 Rust 中创建交互式 shell 界面的库。

shi 基于优秀的 rustyline 构建。它为支持命令、解析它们以及支持无需任何工作即可实现的动态自动完成提供了抽象。

待办事项

这里有一些事情可以做。大多数这些都是代码清理和生活质量改进,而不是功能。例如,我最近才了解到 Rust API 指南。我可能违反了一些值得修复的规则。

我可能是唯一使用这个crate的人,所以我不会知道其他人对哪些功能或更改感到满意。请随时提出建议(或提交PR)。

shi 被用于我的一些个人项目,当我准备好时,我会在这里链接它们。否则,它已经准备好了,尽管它还不稳定。

示例

这是一个相当简单的示例。它没有使用任何状态,并且只有一层嵌套。实际的Rust代码可以在 ./examples/simple.rs 中找到。

use shi::shell::Shell;
use shi::{cmd, parent};

use anyhow::Result;

fn main() -> Result<()> {
    let mut shell = Shell::new("| ");

    shell.register(cmd!("dog", |_, _| { Ok(String::from("woof")) }))?;
    shell.register(parent!(
        "felid",
        cmd!("panther", |_, _| {
            Ok(String::from("generic panther sound"))
        }),
        parent!(
            "felinae",
            cmd!("domestic-cat", |_, _| { Ok(String::from("meow")) }),
            cmd!("dangerous-tiger", |_, _| { Ok(String::from("roar")) }),
        )
    ))?;

    shell.run()?;

    Ok(())
}

以下是上述代码片段的输出

| help
Normal commands:
        'dog' - 'dog'
        'felid' - 'felid'
Built-in commands:
        'history' - 'history'
        'exit' - 'exit'
        'helptree' - 'helptree'
        'help' - 'help'
| helptree
Normal commands
├── dog
└── felid
    ├── panther
    └── felinae
        ├── dangerous-tiger
        └── domestic-cat


Builtins
├── history
├── exit
├── helptree
└── help
| dog
woof
| felid panther
generic panther sound
| felid DNE
Failed to parse fully:

            (spaces trimmed)
         => 'felid DNE'
                   ^
expected a valid subcommand
instead, got: 'DNE';

Run 'felid help' for more info on the command.

         => expected one of 'felinae' or 'panther'.

Run 'helptree' for more info on the entire command tree.

| felid felinae domestic-cat
meow
| exit
bye

贡献

这是我第一次发布Rust crate,所以欢迎任何反馈,即使是来自新手的反馈。不过,目前还没有明确的过程。只需打开一个issue或PR即可。😉

文档

文档托管在 docs.rs/shi

依赖项

~3–14MB
~134K SLoC