最近Pythonを書くことがあるけどRubyでいうrubocopみたいな静的解析をそろそろしたくなってきたのでflake8を使った。
ただそのオプションで少しはまったのでそれを書く。
flake8とは
- 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"
と指定したことでデフォルトを上書きしただけでした。
それだけ。