Получите автодополнение pytest в zshell - PullRequest
0 голосов
/ 04 января 2019

Этот вопрос может лучше подойти для суперпользователя - если это так, дайте мне знать, и я переверну его.

Я использую zsh и часто запускаю pytest из командной строки. Очень распространенная ситуация - мне нужно выполнить определенный тест (или подтест класса).

Бывший выглядит как

pytest test/test_foo_file.py::test_foo_function

и последний что-то вроде

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

Довольно сложно выписать весь точный класс и название теста, и это похоже на что-то созревшее для автозаполнения или нечеткого поиска какого-либо рода. Я не смог достичь этого с помощью того, что я нашел в исследовании - есть ли у кого-нибудь какие-либо рекомендации?

Дайте мне знать, могу ли я быть более конкретным.

1 Ответ

0 голосов
/ 05 января 2019

Отказ от ответственности : я не 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

, которая собирает тесты в текущем каталоге и перечисляет их имена, готовые для передачи в качестве аргументов командной строки.

...