1 个不稳定版本

0.1.0 2022年9月30日

#37#cargo-test

MIT/Apache

580KB
8K SLoC

动态完成增强 cargo

一个替代 cargo 前端,实现了对常用 cargo 命令及其选项(包括参数值、测试名称)的动态 shell 完成,如果启用,还包括工作区/包中的可执行文件使用的选项(有关详细信息,请参阅 cauwugo run)。

安装

$ cargo install bpaf_cauwugo

要启用完成功能,您需要首先在您的 shell 中进行配置 - 这只需要做一次,为您的 shell 选择一个配置,并将其放置在 shell 所期望的位置。

$ cauwugo --bpaf-complete-style-bash
$ cauwugo --bpaf-complete-style-zsh
$ cauwugo --bpaf-complete-style-fish
$ cauwugo --bpaf-complete-style-elvish

如果您使用带有 autocomplete 功能的 bpaf,则可以为您的工作区/包启用完成透明度。

[workspace.metadata.cauwugo]
bpaf = true

由 cargo 本身支持的完成

命令行完成是 shells 或其他与计算机进行文本模式通信的地方中的一种常见功能,其中程序自动或在请求时填写部分输入的程序。完成可以是静态的或动态的。对于静态完成,可能的后续操作集通常是固定的,但可能包括文件名或其部分。对于动态完成,可能的后续操作集由 shell 函数或程序在运行时计算。

Cargo 自带对 zsh 的静态完成,您可以通过输入以下内容找到其内容:

% cat "$(rustc --print sysroot)"/share/zsh/site-functions/_cargo

此完成将填写命令和标志名称、示例(不一定是正确的)或测试。

cauwugo 中的动态完成

cauwugo 使用 bpaf 为所有 bashzshfishelvish 提供 fully dynamic shell completions,并帮助填写不仅标志名称,还有可能的值。

当前支持的命令有:addbuildcheckcleantestrun

cauwugo add

当前搜索可用的包(cargo search)并完成,如果有的话,还会完成将其添加到哪个工作区成员中。应该可以支持处理功能,但这还在 TODO 列表中。

% cauwugo add serde<TAB>
serde    A generic serialization/deserialization framework
serde_alias    An attribute macro to apply serde aliases to all struct fields
serde_amqp    A serde implementation of AMQP1.0 protocol.
serde_any    Dynamic serialization and deserialization with the format chosen at runtime
serde_asn1_der    A basic ASN.1-DER implementation for `serde` based upon `asn1_der`
serde-big-array    Big array helper for serde.
[skip]
% cauwugo add serde_j
% cauwugo add serde_j<TAB>
% cauwugo add serde_json -p <TAB>
bpaf          bpaf_cauwugo  bpaf_derive   docs
% cauwugo add serde_json -p
% cauwugo add serde_json -p <TAB><TAB>
% cauwugo add serde_json -p bpaf_cauwugo

cauwugo build

完成二进制/可执行/基准/测试/包名称以及当前安装的目标

% cauwugo build --example se<TAB>
% cauwugo build --example sensors
% cauwugo build --example sensros --target <TAB>
% cauwugo build --example sensors --target
armv7-unknown-linux-gnueabihf  x86_64-pc-windows-gnu          x86_64-unknown-linux-gnu
% cauwugo build --example sensors --target a<TAB>
% cauwugo build --example sensors --target armv7-unknown-linux-gnueabihf

cauwugo check

cauwugo build 类似,完成二进制/可执行/基准/测试/包名称 + 目标

cauwugo clean

完成包名称

% cauwugo clean --p<TAB>
% cauwugo clean --package
% cauwugo clean --package d<TAB>
% cauwugo clean --package docs

cauwugo test

完成可测试事物的常用名称,但也支持包含实际测试名称的简写,这样你就可以只运行一个测试:cargo test TESTABLE TEST_NAME

% cauwugo test <TAB>
[skip]
Bins, tests, examples
adjacent    bpaf    bpaf_derive    derive    help_format
% cauwugo test de<TAB>
% cauwugo test derive
% cauwugo test derive <TAB>
Available test names
command_and_fallback    help_with_default_parse
% cauwugo test derive co<TAB>
% cauwugo test derive command_and_fallback<ENTER>
    Finished test [unoptimized + debuginfo] target(s) in 0.00s
     Running tests/derive.rs (target/debug/deps/derive-7ef117342dbf6a84)

running 1 test
test command_and_fallback ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s

cauwugo run

为了使用参数完成,你需要使用带有 autocomplete 功能的 bpaf 并启用 passthough

[workspace.metadata.cauwugo]
bpaf = true # use true if all the executables/examples use bpaf or a list of packages if only some are

完成一组通常可运行的项名称加上目标,但也支持将完成传递给可运行的项本身,因此如果你的工作区中的 crates 使用带有动态完成启用的 bpaf,你可以这样做,其中 -- 之后的内容来自 sensors 示例本身,设备名称来自动态完成在其内部运行。

% cauwugo run se<TAB>
% cauwugo run sensors
% cauwugo run sensors -- <TAB>
% cauwugo run sensors -- --sensor
--sensor    --sensor-device <DEVICE>    --sensor-i2c-address <ADDRESS>    --sensor-name <NAME>
% cauwugo run sensors -- --sensor --sensor-device <TAB><TAB>
elakelaiset% cauwugo run sensors -- --sensor-device outdoor                                                                                                                                                                         ~/ej/bpaf
outdoor    Outdoor temperature sensor
tank01    Temperature in a storage tank 1
tank02    Temperature in a storage tank 2
tank03    Temperature in a storage tank 3
temp100    Main temperature sensor
temp101    Output temperature sensor

在这里和 cauwugo test 中,cauwugo 编译测试和示例,并直接询问它们可能的值。除了为 cauwugo 本身配置完成之外,不需要配置其他任何内容即可使用此功能。这可能在交叉编译时不起作用。

未知命令 passthough

任何其他 cauwugo 无法识别的命令 - 它将直接传递给 cargo,因此如果你已安装 cargo-show-asmcargo asm --lib foo 的工作正常,则 cauwugo asm --lib foo 也将正常工作。

依赖项

~1.8–2.5MB
~55K SLoC