在zshell中获取pytest自动完成

时间:2019-01-04 18:33:09

标签: python autocomplete zsh pytest

这个问题可能更适合于超级用户-如果是这种情况,请告诉我,我会予以解决。

我使用zsh并经常从命令行运行pytest。一种非常普遍的情况是我需要运行特定的测试(或类的子测试)。

前者看起来像

pytest test/test_foo_file.py::test_foo_function

和后者类似

pytest test/test_foo_file.py::FooClassTest::test_specific_functionality

写出完整的确切类和测试名称有点痛苦,对于某种形式的自动完成或模糊搜索来说,这似乎已经成熟了。我无法通过研究发现实现这一目标-有人有任何建议吗?

让我知道我是否可以以任何方式更加具体。

1 个答案:

答案 0 :(得分:1)

免责声明:我不是zsh用户,但是该方法与自定义bash补全非常相似:

  1. 创建自定义完成文件,例如

    $ mkdir ~/.zsh-completions
    $ touch ~/.zsh-completions/_pytest
    
  2. ~/.zsh-completions/_pytest内,编写完成函数:

    #compdef pytest
    
    _pytest_complete() {
        local curcontext="$curcontext" state line
        typeset -A opt_args
        compadd "$@" $( pytest --collect-only -q | head -n -2)
    }
    
    _pytest_complete "$@"
    
  3. 调整.zshrc以包括自定义补全,例如

    fpath=(~/.zsh-completions $fpath)
    autoload -U compinit
    compinit
    zstyle ':completion:*' menu select=2
    

重新启动外壳。现在,您应该在选项卡完成时获得单个测试选择:

enter image description here

这里的关键命令是

$ pytest --collect-only -q | head -n -2

它将测试收集到当前目录中,并列出准备好作为命令行参数传递的名称。