【Python】flake8 ~ Pythonコードチェック ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/10/24/000000

で扱ったPython コードのチェックするための
flake8 はコマンドベースで起動できるらしい。

以下の関連記事で扱ったCodeBuild

https://dk521123.hatenablog.com/entry/2020/01/21/221122

に組み込めることを目標(※)に、まずは、flake8 について学ぶ。

※ CodeBuildに flake8 を組み込む
https://dk521123.hatenablog.com/entry/2020/02/17/220545

■ インストール

pip install flake8

flake8 --version

■ コマンド例

# flack8 [対象ファイル]
flake8 main.py

# flack8 [対象ディレクトリ]
flake8 src/

# --exclude [対象外ディレクトリ]
flake8 src/ --exclude tests

# ルールの適用 : 今回は、1行79文字の変更
flake8 --max-line-length=110 main.py

# 詳細表示
flake8 --show-source main.py

# ファイル出力
flake8 --output-file=result.txt main.py

オプションを外部ファイルで取り込む

色々な設定方法があるようだが、
以下の「--config」オプションを使うのがよさそう

http://flake8.pycqa.org/en/latest/user/options.html#cmdoption-flake8-config

flake8 --config=setup.cfg main.py

setup.cfg

[flake8]
exclude=tests
max-line-length=110

https://flake8.pycqa.org/en/latest/internal/option_handling.html
http://flake8.pycqa.org/en/latest/user/configuration.html

■ サンプル

main.py

print("Hello world")
value = 3
if value < 3:
# Tab
        print("Hello")
else:
# Tab
        print("World")

print("Done") 

コマンド

例1:詳細出力

flake8 --show-source main.py

[ 出力結果 ]
main.py:4:1: E115 expected an indented block (comment)
# Tab
^
main.py:5:1: W191 indentation contains tabs
    print("Hello")
^
main.py:5:2: E117 over-indented
    print("Hello")
 ^
main.py:7:1: E115 expected an indented block (comment)
# Tab
^
main.py:8:1: W191 indentation contains tabs
    print("World")
^
main.py:8:2: E117 over-indented
    print("World")
 ^
main.py:10:14: W291 trailing whitespace
print("Done")   
             ^

例2:外部ファイル出力

flake8 --output-file=result.txt main.py

[ result.txt ]
main.py:4:1: E115 expected an indented block (comment)
main.py:5:1: W191 indentation contains tabs
main.py:5:2: E117 over-indented
main.py:7:1: E115 expected an indented block (comment)
main.py:8:1: W191 indentation contains tabs
main.py:8:2: E117 over-indented
main.py:10:14: W291 trailing whitespace

■ flake8 のオプション

以下のサイトを参照。

http://flake8.pycqa.org/en/latest/user/options.html

--max-complexity=n

http://flake8.pycqa.org/en/latest/user/options.html#cmdoption-flake8-max-complexity

循環的複雑度の最大値を指定

循環的複雑度 (Cyclomatic complexity) とは?

 McCabe が開発したプログラム複雑度の指標

https://qiita.com/yut_arrows/items/16749e02313109071338

参考文献

https://www.xn--ebkc7kqd.com/entry/flake8
https://blog-ja.sideci.com/entry/2017/06/20/110000

関連記事

Visual Studio CodePython拡張 ~
https://dk521123.hatenablog.com/entry/2019/10/24/000000
CodeBuildに flake8 を組み込む
https://dk521123.hatenablog.com/entry/2020/02/17/220545