完成
Spring Shell 可以为两个互动 shell 提供完备提案 以及命令行。不过,当壳体在内时,还是有区别的 交互模式中,我们有一个活跃的壳实例,意味着它是 提供更具程序性的方式来提供完成提示会更容易。 当 shell 纯粹作为命令行工具运行时,补全只能 可以通过集成到作系统层的shell,比如Bash来实现。
互动
完成提示通过函数或接口样式计算
方法完备上下文并返回一个列表完工提案实例。完备上下文给你各种情况
关于当前上下文的信息,如命令注册和选项。
如果通用解析器有用,可以注册为豆子
适用于所有命令和场景。例如,现有完备
实现注册选项完成解析器处理完备
作为选项名称。 |
static class MyValuesCompletionResolver implements CompletionResolver {
@Override
public List<CompletionProposal> apply(CompletionContext t) {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
}
}
基于构建器的命令注册选项值可以是 每个选项都定义。
void dump1() {
CommandRegistration.builder()
.withOption()
.longNames("arg1")
.completion(ctx -> {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
})
.and()
.build();
}
通过注释处理命令注册的选项值
通过价值提供者接口定义为@ShellOption注解。
static class MyValuesProvider implements ValueProvider {
@Override
public List<CompletionProposal> complete(CompletionContext completionContext) {
return Arrays.asList("val1", "val2").stream()
.map(CompletionProposal::new)
.collect(Collectors.toList());
}
}
实际价值提供者基于注释的命令需要
注册为Bean。
@ShellMethod(value = "complete", key = "complete")
public String complete(
@ShellOption(valueProvider = MyValuesProvider.class) String arg1)
{
return "You said " + arg1;
}
命令行
命令行完成目前仅支持 bash,并且有文档说明
内置完成命令完成。