見出し画像

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は重宝しそうです。
 コードセーブ時に自動適用するかどうか?などはしばらく使ってみた後に決めたいと思います。

この記事が気に入ったらサポートをしてみませんか?