5个版本

使用旧的Rust 2015

0.1.5 2017年1月18日
0.1.4 2016年12月10日
0.1.3 2016年10月29日
0.1.1 2016年7月30日
0.1.0 2016年7月14日

#596 in Unix API

MIT 协议

19KB
230

clapcomp - clap完成生成器作为命令

CLI参数解析工具 - clap - 具有生成shell完成脚本的功能,本项目公开了这一能力!

现在,您可以通过单个命令生成shell完成脚本!

即使 非Rust项目 也可以从clap的完成生成器中受益,只需提供您的参数配置!

目录

安装

crate.io

$ cargo install clapcomp

从GitHub

$ cargo install --git https://github.com/wdv4758h/clapcomp/

下载预构建二进制文件

# by curl
$ curl -O -J -L https://github.com/wdv4758h/clapcomp/releases/download/v0.1.5/clapcomp-v0.1.5-x86_64-unknown-linux-gnu.tar.gz

# by wget
$ wget https://github.com/wdv4758h/clapcomp/releases/download/v0.1.5/clapcomp-v0.1.5-x86_64-unknown-linux-gnu.tar.gz

用法

$ clapcomp --help
clapcomp 0.1.5
clap completion generator as command

USAGE:
    clapcomp [FLAGS] [OPTIONS] <input>

FLAGS:
    -h, --help       Prints help information
        --stdout     output result to STDOUT
    -V, --version    Prints version information

OPTIONS:
    -f, --format <format>      input format [default: yaml]  [values: yaml]
    -d, --outdir <outdir>      output directory
    -o, --outfile <outfile>    output file
    -s, --shell <shell>        target shell for completion [default: bash]  [values: bash,
                               fish, zsh, powershell]

ARGS:
    <input>    input file
# src/cli.yml.yml is this project's setting
$ clapcomp src/cli.yml.yml --shell bash
$ cat clapcomp.bash-completion
_clapcomp() {
    local i cur prev opts cmds
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    cmd=""
    opts=""

    for i in ${COMP_WORDS[@]}
    do
        case "${i}" in
            clapcomp)
                cmd="clapcomp"
                ;;

            clapcomp)
                cmd+="_clapcomp"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        clapcomp)
            opts=" -f -s -d -o -h -V  --format --shell --outdir --outfile --stdout --help --version  <input> "
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
                return 0
            fi
            case "${prev}" in

                --format)
                    COMPREPLY=($(compgen -W "yaml" -- ${cur}))
                    return 0
                    ;;
                    -f)
                    COMPREPLY=($(compgen -W "yaml" -- ${cur}))
                    return 0
                    ;;
                --shell)
                    COMPREPLY=($(compgen -W "bash fish" -- ${cur}))
                    return 0
                    ;;
                    -s)
                    COMPREPLY=($(compgen -W "bash fish" -- ${cur}))
                    return 0
                    ;;
                --outdir)
                    COMPREPLY=("<outdir>")
                    return 0
                    ;;
                    -d)
                    COMPREPLY=("<outdir>")
                    return 0
                    ;;
                --outfile)
                    COMPREPLY=("<outfile>")
                    return 0
                    ;;
                    -o)
                    COMPREPLY=("<outfile>")
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
            return 0
            ;;

    esac
}

complete -F _clapcomp clapcomp
# src/cli.yml.yml is this project's setting
$ clapcomp src/cli.yml.yml --shell fish
$ cat clapcomp.fish
function __fish_using_command
    set cmd (commandline -opc)
    if [ (count $cmd) -eq (count $argv) ]
        for i in (seq (count $argv))
            if [ $cmd[$i] != $argv[$i] ]
                return 1
            end
        end
        return 0
    end
    return 1
end

complete -c clapcomp -n "__fish_using_command clapcomp" -s f -l format -d "input format" -r -f -a "yaml"
complete -c clapcomp -n "__fish_using_command clapcomp" -s s -l shell -d "target shell for completion" -r -f -a "bash fish"
complete -c clapcomp -n "__fish_using_command clapcomp" -s d -l outdir -d "output directory"
complete -c clapcomp -n "__fish_using_command clapcomp" -s o -l outfile -d "output file"
complete -c clapcomp -n "__fish_using_command clapcomp" -l stdout -d "output result to STDOUT"
complete -c clapcomp -n "__fish_using_command clapcomp" -s h -l help -d "Prints help information"
complete -c clapcomp -n "__fish_using_command clapcomp" -s V -l version -d "Prints version information"
$ clapcomp src/cli.yml.yml --shell bash fish zsh powershell

关于二进制文件的信息

大小

x86_64, Linux(基于Arch Linux构建)

文件名 版本 是否经过精简? 大小(字节) 大小(MB)
clapcomp v0.1.5 3475304 3.4M
clapcomp v0.1.5 1142296 1.1M

x86_64, Linux, musl(基于Arch Linux构建)

文件名 版本 是否经过精简? 大小(字节) 大小(MB)
clapcomp v0.1.5 3413112 3.3M
clapcomp v0.1.5 1185832 1.2M

共享库依赖

x86_64, Linux(基于Arch Linux构建)

$ ldd ./target/release/clapcomp
        linux-vdso.so.1 (0x00007ffd8d5d1000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8019d89000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f8019b73000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f80197d2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8019fa6000)

x86_64, Linux, musl(基于Arch Linux构建)

$ ldd ./target/x86_64-unknown-linux-musl/release/clapcomp
        not a dynamic executable

更新日志

尚未实现(计划)

  • 支持从原始帮助信息生成

v0.1.5(2017-01-18)

其他
  • 更新依赖关系

v0.1.4(2016-12-10)

功能
  • 支持 zsh
  • 支持powershell

v0.1.3(2016-10-29)

功能
  • 添加fish完成

v0.1.2(2016-08-03)

功能
  • 支持输出到STDOUT和特定文件
  • 支持一次输出多个完成文件

v0.1.1(2016-07-30)

功能
  • 支持 fish shell完成

v0.1.0(2016-07-14)

功能
  • 支持 bash 完成脚本

注意

我只在我的x86_64 Linux上进行了测试。其他平台由CI构建。如果它们无法正常工作,请告诉我。

开发

制作发行版

  1. 在以下位置更新版本src/cli.yml
  2. 在以下位置更新版本Cargo.toml
  3. 在以下位置更新版本Cargo.lock
  4. 添加git标签

特别感谢

许可证

clapcomp遵循MIT许可证(与clap相同) - 详细信息请参阅LICENSE文件

依赖项

~1MB
~11K SLoC