Pythonでコードチェックをするためにflake8いれた時に少しはまった

最近Pythonを書くことがあるけどRubyでいうrubocopみたいな静的解析をそろそろしたくなってきたのでflake8を使った。
ただそのオプションで少しはまったのでそれを書く。

flake8とは

gitlab.com

  • PyFlakes
  • pycodestyle
  • Ned Batchelder’s McCabe script

上の3つをラッパーしたコードチェックツールでPEP8にしたがって書かれているかやコードの複雑さみたいなのをチェックしてくれる。

導入自体は簡単で python -m pip install flake8 で入る。
動作自体もPythonのファイルを flake8 path/hoge.pyと指定するかディレクトリを指定も出来る。

どこにはまったのか

今回はチェック用に下記の雑なサンプルを用意する。

import numpy as np
import os, sys

x = np.arange(
  0,
  10,
  2)
print x * 3
print os.name
print sys.platform

これをflake8で解析をすると

$ python -m flake8 hoge.py
hoge.py:2:10: E401 multiple imports on one line

一行に複数importするモジュール書いてるよと言われる。
ただ今後も一行で書いていきたいとなった場合にflake8ではignoreオプションを--ignore="E401"のように指定することでスキップすることが出来る。

今回は説明上コマンドラインでオプションとして渡しているが設定ファイルでも同じ

$ python -m flake8 --ignore="E401" hoge.py 
hoge.py:5:3: E121 continuation line under-indented for hanging indent

??????? 一行に複数importの警告が消えて解決かと思ったら何か新しいのが出た。

オプションの指定方法は間違っってなさそう。。。。

結論

$ python -m flake8 -h | grep -A 3 "\-\-ignore"
  --ignore=errors       Comma-separated list of errors and warnings to ignore
                        (or skip). For example, ``--ignore=E4,E51,W234``.
                        (Default: E121,E123,E126,E226,E24,E704,W503,W504)
  --max-line-length=n   Maximum allowed line length for the entirety of this
                        run. (Default: 79)

デフォルトが最初に設定されていて--ignore="E401"と指定したことでデフォルトを上書きしただけでした。
それだけ。