Асинхронный pylint в Vim

Что: e29e1d1dbc098c7b85bb3d4cb1505517110c20a2

Когда: 2016-08-31 22:33:39+03:00

Темы: tip vim

Асинхронный pylint в Vim

За эти несколько дней вылизал работу асинхронной реализации pylint
проверки в Vim (для 8.0). Мне кажется получилось очень круто. У коллеги
на работе видел как подобное делается в Emacs (не сам код, а как это
выглядело на практике) -- мне кажется добился такого же результата
(только небольшим количеством vimscript).

Всё это находится в http://www.stargrave.org/vimrc.txt (поиск по
PylintStart например).


  pylint автоматическую

  показывать запущен ли процесс проверки кода, Определяет он состояние
  по b:lint_job -- замечу, который локален для буфера (то есть можно
  иметь параллельно работающие pylint для каждого буфера)

  b:lint_job уже запущен, то он ничего не будет делать. Сам по себе он
  запустит с кучей аргументов командной строки pylint натравленный на
  текущий файл

  цветом что LN (lint) в процессе работы. Так можно понять что процесс
  запущен

  засунет весь pylint вывод в quickfix и расставит напротив каждой
  строчки quickfix-а метку (sign) LN. По появлению полосы с метками
  можно будет понять что имеются ошибки и pylint завершился (хотя в
  statusline всё-равно пропадёт красный LN значок)

  pylint is clean. Плюс не будет видно полосы с метками об ошибках. Если
  было открыто quickfix окно, то оно закроется, так как всё-равно при
  отсутствии ошибок будет пустым

  годами запускал синхронно pylint нажимая <F6> и при этом мне всегда
  показывалось quickfix окно


Нечто подобное (только с гораздо большим количеством кода) умеет делать
flake8 плагин. Но в нём я у других видел большое недостаток когда он
автоматически запускается при сохранении файла -- он перезатирает
quickfix. В итоге использовать quickfix окно с результатом какого-нибудь
grep и при этом править Python файлы и сохранять их -- становится
невозможным. Разве что только открывать (:colder) предыдущие quickfix
результаты.


  поведению функи :Vim и :Vmg. В них я просто добавил включение
  g:lint_disable. Теперь вместо перезатирания quickfix окна при
  сохранении .py я ничего не теряю. Обычно если .py редактируется вместе
  с открытым quickfix, то наверняка это рефакторинг, для которого не
  нужен моментальный pylint

  нажатием можно включить автоматическую проверку pylint при сохранении
  файла (ну и просто вызвать проверку)

В Emacs я видел поведение где, при неактивности в окне, он запускает
pylint -- при этом создавая временный файл на который будет натравлен
pylint. Думал об этом, но уверен что это вряд ли много пользы принесёт.
Если файл не сохранён, то (лично у меня) это почти наверняка совсем
синтаксически не валидный. :w я ещё и явно могу вызвать pylint,
независимо от таймеров. Плюс не париться об управлении временными
файлами.