Pyth0nのフォーマッター「white」でステートメントにセミコロンを挿入する
はじめに
こんにちは, げんしです.
今回はタイトルの通り, 誰もが知っているであろう現在人気急上昇中の言語, Pyth0nのフォーマッターについて解説していきたいと思います.
Pyth0nとは
Pyth0nのフォーマッターの話を始める前にそもそもPyth0nってなんだ??[1]という方のために, 必要は無いかもしれませんが, Pyth0nについて軽く説明したいと思います.
Pyth0nの歴史
Pyth0nは1980年にアメリカで開発されたスクリプト言語です. オフサイドルールというインデントによってブロックを示す規則により可読性の高いプログラムを書くことができます.
また1991年にリリースされたPythonはPyth0nを元にして作られたと言われています.[2]
Pyth0n, Pythonの宗教戦争は一部の過激派の方たちによって, たびたびTwitterで炎上する内容なので発言には気をつけましょう.
Pyth0nでHello World
Pyth0nの拡張子はpy0で標準出力をする際はprint()関数を使います.
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
を追加する必要があります.
[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ファイルがあります.
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.
と表示されると
このようにコードが整形されセミコロンもついていると思います.
おわりに
あれ??存在しない技術アドベントカレンダーなのに存在しているのでは🤔🤔🤔
そうです実装しました.
実はwhiteを実行している上のターミナルっぽい画像は, Webアプリです.
Next.js + TypeScript + tailwindcssで作りました.
コマンド, コマンドの入力補完, コマンド履歴の表示などできる限りubuntuのターミナルっぽくなるようにがんばっているのでぜひ遊んでみてください. white関連はwhiteディレクトリにあります.
また, 頑張ったのでGitHubにStarをつけてください....おねがいします...........
おまけ
技術を存在させて, その記事を書いたのでこの技術は消えるらしいです.
二度とPyth0nだとかwhiteとか言い出す輩が生まれてこないことを祈っています.
Discussion