Стабильность .emacs при флайчеке

Чтобы заставить 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. Что еще могло измениться в моей системе, чтобы вызвать внезапное увеличение количества предупреждений о флайчеках?


person Calaf    schedule 07.09.2017    source источник


Ответы (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
person Calaf    schedule 07.09.2017

Может быть лучше настроить хук второстепенного режима или добавить только в режим программирования

(add-hook 'prog-mode-hook 'flycheck-mode)

Установив его на global, он включит его в каждом буфере, даже в текстовом режиме, таком как режим организации, который не нужен. Также может замедлить работу. :)

person dunkaroo    schedule 18.09.2017
comment
Выборочная активация flycheck действительно может быть хорошим советом, но это также отдельная тема. Даже если flycheck активирован только для Python, возникнет проблема, описанная в этом вопросе. - person Calaf; 18.09.2017