PythonのLintで使われる、flake8の設定ファイル.flake8を調べてみました。
例外にするルールなどが書かれていて、みんなLintのどこに不満を持つかがわかります。
やってみてわかったことですが、みなさん結構無法者ですね。
集計条件
GitHubで公開された.flake8を100こ抽出しました。
サンプル数が少ない点は認めていて、今後頑張ろうかと思います。
ignore
ルールの例外です。
例外ルールは一人で同じものを記述しているかもしれませんが、
そういうのは考慮しないで集計しています。
1位 18票
E501 line too long
でましたね。
2位 13票
E402 module level import not at top of file
なるほど。
3位 7票
E128 continuation line under-indented for visual indent
これはたぶん、自動インデントの赴くままに書きたいというやつですね。
以下、得票数のみ記載です。
5票 E111,E226
4票 E114,E121,F401
3票 D203,E133,E241,E251,E302,F403
2票 E123,E125,E126,E221,E228,E261,E731,I100,N802,N803,W191,W391,W503
1票 C901,D100,D101,D102,D103,D104,D105,D200,D204,E113,E12,E122,E129,E201,E202,E203,E211,E222,E231,E242,E266,E303,E305,E4,E41,E5,E702,E711,E712,E721,F811,H306,I201,Q000,W292
max-line-length
一行あたりの文字数です。
11票 100
8票 160
8票 120
6票 80
6票 99
5票 119
3票 200
2票 110
1票 130
1票 92
1票 82
1位が11票ですが、E501が18票入っているので、やはり治安がない感じがしますね。
苦労話
GitHubのAPIでカッコよくささっと集計しようと思ったんですが、ダメでした。まず、ファイル名だけでいい感じにサーチすることができなかった。code?q=filename:.flake8
でいけると思いきや、+repo:user_name/repo_name
を指定しないとだめ。
仕方がないので、repo名を持ってくる必要があり、dotfiles
で検索をかけてみました。repositories?q=dotfiles
をうまくやれば、code?
でrepo
が指定できます。しかし問題が。dotfilesだけでも、7万件くらいあったんですが、どう頑張っても1000個以上のデータはAPIではとってこれないんですね。TOKENとかゲットして、リクエスト制限はクリアしたんですが、それでもダメ。
じゃあ1000個だけ取ればいいやって思ったんですけど、最初の1000人は誰も.flake8を持っていなかった。
filenameとrepoの組み合わせではサーチできない、というのが痛すぎる。。
しかたがないので、おなじみのWEBのGitHubで、検索ボックスにfilename:.flake8
を入れて、でてくるrepoを心を込めて100件コピペし、それをキーにAPIでcode?q=
で検索してなんとかしました。
なお、ファイルのurl
をゲットして取得したAPIのレスポンスから、さらにdownload_url
を取得してリクエストを投げると、レスポンスが.flake8の中身になっているので楽チンでした。
また、TOKENとかをゲットしても高速にサーチを繰り返すと403が結構でるので、その辺のハンドリングも必要です。
この辺のコードはいつか[どこか](my repository on GitHub, maybe.)で公開します。
結論
とにかく、文字数制限はみんなに嫌われているような気がする結果です。
ignore = E501
とmax-line-length
を同時に設定する人はいないので、
合計すると70%の人が文字数制限をよくないと思っています。
100までは自制心がある設定だとしても、約半数の人はそれを超えた設定をしている。
個人的な見解ですが、この結果を見て、エンジニアの良し悪しをどうこう言うのはダメな考え方だと思っていて、むしろみんなこういう設定を積極的にしているんだ、ちゃんと設定すればいいじゃないか、みんなで決めたルールならいいんだ!という感じで勇気をもらうのが良いと思います。
いつか、もっとたくさんサンプルをささっととるコードを書きたいです。