LinterとFormatter
(Python学習初心者の試行錯誤・備忘録です)
Youtubeで「のえ研」様の動画
を見かけ「こんなもの(Linter、Formatterというもの)がある」(そもそもPEP8というコーディングルールがある)と言うのをはじめて知りました。
これは是非、自分も取り入れておきたい。
Linterは「警告」してくれるツール、Formatterは「整形」してくれるツールとのこと。
この動画で紹介されているのは、LinterとしてはFlake8、Formatterとしては Blackとisort。
複数の情報を突き合わせるために、Linter、Formatterのネット情報を検索。Zennで株式会社ヤマデン様の
こちらの記事を見つけて読む。pip で、flake8とBlackをインストール。
[flake8]
max-line-length = 88
ignore = E203, W503
というファイルを .flake8 として置きました。
Blackを試す
いきなり長いコード入れると変えるところばかりで大変そうなので、昨日のこれ、
import PySimpleGUI as eg
# カスタムテーマのパラメータを設定
my_custom_theme = {
'BACKGROUND': 'black',
'TEXT': 'white',
'INPUT': 'gray25',
'TEXT_INPUT': 'white',
'SCROLL': 'gray44',
'BUTTON': ('white', 'black'),
'PROGRESS': ('#01826B', '#D0D0D0'),
'BORDER': 1,
'SLIDER_DEPTH': 0,
'PROGRESS_DEPTH': 0,
}
# カスタムテーマを適用
eg.theme_add_new('MyCustomTheme', my_custom_theme)
eg.theme('MyCustomTheme')
# TkEasyGUIのウィンドウを作成
myfont = ('Arial', 30)
mysize = (14, 1)
layout = [[eg.Text("テキスト枠", font=myfont, size=mysize)],
[eg.Button("ボタン", font=myfont)]]
window = eg.Window("テーマのテスト", layout=layout)
# ウィンドウの読み取りループ
while True:
event, value = window.read()
if event == eg.WIN_CLOSED or event == "Exit": # 終わるとき
break
window.close()
で試してみます。
black tktest.py --diff
これをしてみると、
--- tktest.py 2024-05-23 00:33:39.581266+00:00
+++ tktest.py 2024-05-23 00:34:23.072106+00:00
@@ -1,34 +1,36 @@
import PySimpleGUI as eg
# カスタムテーマのパラメータを設定
my_custom_theme = {
- 'BACKGROUND': 'black',
- 'TEXT': 'white',
- 'INPUT': 'gray25',
- 'TEXT_INPUT': 'white',
- 'SCROLL': 'gray44',
- 'BUTTON': ('white', 'black'),
- 'PROGRESS': ('#01826B', '#D0D0D0'),
- 'BORDER': 1,
- 'SLIDER_DEPTH': 0,
- 'PROGRESS_DEPTH': 0,
+ "BACKGROUND": "black",
+ "TEXT": "white",
+ "INPUT": "gray25",
+ "TEXT_INPUT": "white",
+ "SCROLL": "gray44",
+ "BUTTON": ("white", "black"),
+ "PROGRESS": ("#01826B", "#D0D0D0"),
+ "BORDER": 1,
+ "SLIDER_DEPTH": 0,
+ "PROGRESS_DEPTH": 0,
}
# カスタムテーマを適用
-eg.theme_add_new('MyCustomTheme', my_custom_theme)
-eg.theme('MyCustomTheme')
+eg.theme_add_new("MyCustomTheme", my_custom_theme)
+eg.theme("MyCustomTheme")
# TkEasyGUIのウィンドウを作成
-myfont = ('Arial', 30)
+myfont = ("Arial", 30)
mysize = (14, 1)
-layout = [[eg.Text("テキスト枠", font=myfont, size=mysize)],
- [eg.Button("ボタン", font=myfont)]]
+layout = [
+ [eg.Text("テキスト枠", font=myfont, size=mysize)],
+ [eg.Button("ボタン", font=myfont)],
+]
window = eg.Window("テーマのテスト", layout=layout)
# ウィンドウの読み取りループ
while True:
event, value = window.read()
if event == eg.WIN_CLOSED or event == "Exit": # 終わるとき
break
-window.close()
\ No newline at end of file
+window.close()
would reformat tktest.py
All done! ✨ 🍰 ✨
1 file would be reformatted.
ふうん、なるほどねぇ。blackの--diffオプションは変えるべきところを表示するだけなので、これでいいと思ったらオプションなしで実行。これで実ファイルに反映されました。
flake8を試す
black適用後のファイルでは指摘は何も出ませんでした。これでは面白くないので、一旦元のファイルに戻してやってみました。
tktest.py:34:15: W292 no newline at end of file
あれ、指摘はそれだけか?
感想
これまで特にリストの表記で、自分の書いたのは「汚いなぁ」と感じてきたので、Blackは重宝しそうです。
コードセーブ時に自動適用するかどうか?などはしばらく使ってみた後に決めたいと思います。