From e29e1d1dbc098c7b85bb3d4cb1505517110c20a2 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 31 Aug 2016 22:33:39 +0300 Subject: [PATCH] =?utf8?q?=D0=90=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?utf8?q?=D0=BD=D1=8B=D0=B9=20pylint=20=D0=B2=20Vim?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit За эти несколько дней вылизал работу асинхронной реализации pylint проверки в Vim (для 8.0). Мне кажется получилось очень круто. У коллеги на работе видел как подобное делается в Emacs (не сам код, а как это выглядело на практике) -- мне кажется добился такого же результата (только небольшим количеством vimscript). Всё это находится в http://www.stargrave.org/vimrc.txt (поиск по PylintStart например). * есть переменная g:lint_disable которая позволяет отключить работу pylint автоматическую * есть PylintStatus который можно засунуть в statusline и он будет показывать запущен ли процесс проверки кода, Определяет он состояние по b:lint_job -- замечу, который локален для буфера (то есть можно иметь параллельно работающие pylint для каждого буфера) * по нажатию запускается PylintStart. Он проверит что если b:lint_job уже запущен, то он ничего не будет делать. Сам по себе он запустит с кучей аргументов командной строки pylint натравленный на текущий файл * При этом во время его работы в statusline будет показано красным ярким цветом что LN (lint) в процессе работы. Так можно понять что процесс запущен * Когда процесс завершится, то он вызовет PylintFinish. Эта функция засунет весь pylint вывод в quickfix и расставит напротив каждой строчки quickfix-а метку (sign) LN. По появлению полосы с метками можно будет понять что имеются ошибки и pylint завершился (хотя в statusline всё-равно пропадёт красный LN значок) * Если при этом ошибок не было, то будет выведено зелёное сообщение что pylint is clean. Плюс не будет видно полосы с метками об ошибках. Если было открыто quickfix окно, то оно закроется, так как всё-равно при отсутствии ошибок будет пустым * Чтобы открыть quickfix окно, можно нажать . Лично я просто годами запускал синхронно pylint нажимая и при этом мне всегда показывалось quickfix окно * При сохранении файла .py PylintStart запускается автоматически Нечто подобное (только с гораздо большим количеством кода) умеет делать flake8 плагин. Но в нём я у других видел большое недостаток когда он автоматически запускается при сохранении файла -- он перезатирает quickfix. В итоге использовать quickfix окно с результатом какого-нибудь grep и при этом править Python файлы и сохранять их -- становится невозможным. Разве что только открывать (:colder) предыдущие quickfix результаты. * Вместо vimgrep или :Ggrep я использую собственные чуть изменённые по поведению функи :Vim и :Vmg. В них я просто добавил включение g:lint_disable. Теперь вместо перезатирания quickfix окна при сохранении .py я ничего не теряю. Обычно если .py редактируется вместе с открытым quickfix, то наверняка это рефакторинг, для которого не нужен моментальный pylint * А вот нажатие форсированно выключает g:lint_disable. Теперь одним нажатием можно включить автоматическую проверку pylint при сохранении файла (ну и просто вызвать проверку) В Emacs я видел поведение где, при неактивности в окне, он запускает pylint -- при этом создавая временный файл на который будет натравлен pylint. Думал об этом, но уверен что это вряд ли много пользы принесёт. Если файл не сохранён, то (лично у меня) это почти наверняка совсем синтаксически не валидный. :w я ещё и явно могу вызвать pylint, независимо от таймеров. Плюс не париться об управлении временными файлами. -- 2.48.1