flycheck下.emacs的稳定性
Stability of .emacs under 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
开始,他会得到相同的行为。我的系统中可能还发生了什么其他变化以触发 flycheck 警告突然增加?
好的,我找到了答案。
flycheck chooses(默默地?)flake8,如果没有找到,它会返回到 pylint(然后是 pycompile)。
问题是 symlink flake8
消失了。这里是 why/how.
选择 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
symlink /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
据推测,当您更新到 Python 3.6 时,flake8
什么也没有指向(port select
已更新,symlink 已删除)但没有 flake8-36。当你降级到 Python 2.7 时,symlink 无法恢复(其中之一,也许是前者,值得警告——可能是 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.
然后 link 返回并且 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 模式)中也是如此。也可能会减慢速度。 :)
为了让 flycheck 为 Python 工作,我已经达到了令人满意的 .emacs
,结果要求不超过:
(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)
现在
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
开始,他会得到相同的行为。我的系统中可能还发生了什么其他变化以触发 flycheck 警告突然增加?
好的,我找到了答案。
flycheck chooses(默默地?)flake8,如果没有找到,它会返回到 pylint(然后是 pycompile)。
问题是 symlink flake8
消失了。这里是 why/how.
选择 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
symlink /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
据推测,当您更新到 Python 3.6 时,flake8
什么也没有指向(port select
已更新,symlink 已删除)但没有 flake8-36。当你降级到 Python 2.7 时,symlink 无法恢复(其中之一,也许是前者,值得警告——可能是 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.
然后 link 返回并且 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 模式)中也是如此。也可能会减慢速度。 :)