Стабильность.emacs под flycheck
Чтобы заставить Flycheck работать на Python, я достиг удовлетворительного .emacs
Оказалось, что требуется не более:
(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)
Теперь после небольшого ожидания того, на что будет похож Python 3.6, даже двухслойный
class Foo():
pass
получает целый ряд предупреждений:
Too few public methods (0/2) [too-few-public-methods]
Class has no __init__ method [no-init]
Old-style class defined. [old-style-class]
Missing class docstring [missing-docstring]
Missing module docstring [missing-docstring]
несмотря на это я теперь твердо вернулся в 2.7 (sudo port select --set python python27
).
Emacs помогает нам привыкнуть к контексту. Обычно не имеет значения, что находится в системе; человек получает такое же поведение, если он начинает с неизменного .emacs
, Что еще могло измениться в моей системе, чтобы вызвать внезапное увеличение предупреждений о мухах?
2 ответа
ОК, я нашел ответ.
flycheck выбирает (молча?) flake8, и если он не найден, он возвращается к pylint (и впоследствии к pycompile).
Проблема заключалась в том, что символическая ссылка flake8
исчез. Вот почему / как.
После выбора python36 и обратно
~/ > sudo port select --set python python36
~/ > sudo port select --set python python27
и после выбора pip36 и обратно
~/ > sudo port select --set pip pip36
~/ > sudo port select --set pip pip27
символическая ссылка /opt/local/bin/flake8
исчезает. Осталось только flake8-2.7.
> ls -l /opt/local/bin/flake8*
lrwxr-xr-x 1 root admin 70 20 Mar 16:35 /opt/local/bin/flake8-2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/flake8
Что происходит, по-видимому, это то, что flake8
указывает на ничто (port select
обновляется, и символическая ссылка удаляется) при обновлении до Python 3.6, но не имеет flake8-36. Символическая ссылка не может быть восстановлена, когда вы переходите на Python 2.7 (один из них, возможно, первый, заслуживает предупреждения - возможно, как незначительная ошибка в MacPorts).
~/ > sudo port select --list flake8
Available versions for flake8:
flake8-27
none (active)
Решение состоит в том, чтобы явно указать flake8
в flake8-27
когда ты понижаешься
~/ > sudo port select --set flake8 flake8-27
Selecting 'flake8-27' for 'flake8' succeeded. 'flake8-27' is now active.
И ссылка возвращается и Flycheck выбирает flake8
над pylint
,
> ls -l /opt/local/bin/flake8*
lrwxr-xr-x 1 root admin 25 7 Sep 09:01 /opt/local/bin/flake8 -> /opt/local/bin/flake8-2.7
lrwxr-xr-x 1 root admin 70 20 Mar 16:35 /opt/local/bin/flake8-2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/flake8
Может быть лучше настроить вспомогательный режим или только добавить в режим программирования
(add-hook 'prog-mode-hook 'flycheck-mode)
Установив его на global
включит его в каждом буфере даже в текстовом режиме, например, в режиме org, который не нужен. Также может замедлить ход вещей.:)