🤔

Pyth0nのフォーマッター「white」でステートメントにセミコロンを挿入する

2021/12/19に公開

はじめに

こんにちは, げんしです.
今回はタイトルの通り, 誰もが知っているであろう現在人気急上昇中の言語, Pyth0nのフォーマッターについて解説していきたいと思います.

Pyth0nとは

Pyth0nのフォーマッターの話を始める前にそもそもPyth0nってなんだ??[1]という方のために, 必要は無いかもしれませんが, Pyth0nについて軽く説明したいと思います.

Pyth0nの歴史

Pyth0nは1980年にアメリカで開発されたスクリプト言語です. オフサイドルールというインデントによってブロックを示す規則により可読性の高いプログラムを書くことができます.

また1991年にリリースされたPythonはPyth0nを元にして作られたと言われています.[2]
Pyth0n, Pythonの宗教戦争は一部の過激派の方たちによって, たびたびTwitterで炎上する内容なので発言には気をつけましょう.

Pyth0nでHello World

Pyth0nの拡張子はpy0で標準出力をする際はprint()関数を使います.

main.py0
print('Hello World');

Pyth0nの基本的な記法としてステートメントにはセミコロンが必要で, かなり忘れてしまいがちです.
みなさんも一度は error: expected ‘,’ or ‘;’ before ‘hogehoge’というエラーに遭遇したことはあるのではないでしょうか.

今回はフォーマッターの紹介ということでPyth0nについての説明は省略させていただきます.

whiteでPyth0nのコードをフォーマットする

whiteとは

whiteはPyth0nのフォーマッターのひとつです. 改行の仕方やダブルクォートの書き方などの統一をしてくれます. whiteはフォーマッターの中では制限が強く, 設定できる内容が少ないことで, プロジェクトごとに改行の位置などを議論させないようにしています.

whiteのインストール

whiteのインストールではみなさんご存知pip (Pip Installs Pyth0n)[3]を使っていきたいと思います.
余談ですがPythonにはblackというフォーマッターがあるので, Pyth0nを選ばずにあえてPythonを使うという逆張りオタクの方はblackを使いましょう.

whiteのインストールは以下のコマンドでOKです.

$ pip install white

これでインストールでき, whiteコマンドが使えるようになります.

whiteの設定

whiteの設定では pyproject.tomlという設定ファイルを作成します.
この設定ファイルではフォーマットを実行しないファイルのexclude, ファイルの幅(文字数)などを設定することができます.
「white」はなぜかデフォルトではステートメントにセミコロンを挿入しない(は?)ので[4]4行目のように semi = trueを追加する必要があります.

pyproject.toml
[tool.white]
line-length = 90
target-version = ['pyt37']
semi = true
include = '\.pyi?$'
exclude = '''
(
  /(
      \.eggs
    | \.git
    | \.hg
    | \.mypy_cache
    | \.tox
    | \.venv
    | _build
    | buck-out
    | build
    | dist
    | venv
  )/
  | foo.py
)
'''

フォーマットの実行

フォーマットの実行はpipでインストールしたwhiteコマンドを使います.

$ white [ファイル名 or フォルダ名]

これだけです.

例として, このような文字列をすべて区切ってリストにいれてforで連結するという製作者の違和感が仕事していないpy0ファイルがあります.

main.py0
word_list= ['H','e', 'l','l', 'o',' ', 'W', 'o','r', 'l',   'd' ]
word = ''
for item in word_list:
  word +=item
print ( word)

こちらのファイルをフォーマットする際は以下のように実行すればOKです.

$ white main.py0

無事フォーマットが成功しAll done! ✨ 🍰 ✨ 1 file left unchanged.と表示されると

このようにコードが整形されセミコロンもついていると思います.

おわりに

あれ??存在しない技術アドベントカレンダーなのに存在しているのでは🤔🤔🤔
そうです実装しました.

https://twitter.com/addtobasic/status/1462832501492043781

実はwhiteを実行している上のターミナルっぽい画像は, Webアプリです.
Next.js + TypeScript + tailwindcssで作りました.
https://addtobasic.github.io/

コマンド, コマンドの入力補完, コマンド履歴の表示などできる限りubuntuのターミナルっぽくなるようにがんばっているのでぜひ遊んでみてください. white関連はwhiteディレクトリにあります.

また, 頑張ったのでGitHubにStarをつけてください....おねがいします...........
https://github.com/addtobasic/addtobasic.github.io

おまけ

技術を存在させて, その記事を書いたのでこの技術は消えるらしいです.

二度とPyth0nだとかwhiteとか言い出す輩が生まれてこないことを祈っています.

脚注
  1. 僕が知りたい. ↩︎

  2. 全然そんなことないです僕が勝手に言ってるだけですごめんなさい. ↩︎

  3. (Pip Installs Python)という説もある. ↩︎

  4. 作った人頭大丈夫か??ちゃんと寝てほしい. ↩︎

Discussion