1 个不稳定版本
0.1.0 | 2022年9月30日 |
---|
#37 在 #cargo-test
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 为所有 bash
、zsh
、fish
和 elvish
提供 fully dynamic shell completions,并帮助填写不仅标志名称,还有可能的值。
当前支持的命令有:add
、build
、check
、clean
、test
和 run
。
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-asm
且 cargo asm --lib foo
的工作正常,则 cauwugo asm --lib foo
也将正常工作。
依赖项
~1.8–2.5MB
~55K SLoC