はじめに
今日の羽生さんの勝利には震えました。nikkieです
フォーマッタ(例:Black)って毎日お世話になってます1が、すごくないですか?
どんな仕組みで動いたらあんな風にフォーマットできるのか、私は皆目見当もつきません!
そんなフォーマッタの仕組みを覗けちゃうトークがPyCon APAC 2023にありました。
目次
- はじめに
- 目次
- トーク「Reformating your code without AI - let's see how a formatter work」
- フォーマッタはどのように動作するのか
- 終わりに
- P.S. Cheuk Ting Hoさんは11/15(水)のみんなのPython勉強会でも話していただきます!
トーク「Reformating your code without AI - let's see how a formatter work」
Cheuk Ting Hoさんによるトークです。
https://2023-apac.pycon.jp/timetable?id=EFRGJM
次のトークをお知らせします。
— PyCon JP (@pyconjapan) 2023年10月28日
14:10~
Reformating your code without AI - let's see how a formatter work
登壇者: Cheuk Ting Ho
トラックNo: #pyconapac_2
https://t.co/Sgb1fLl2zP
#pyconjp #pyconapac #pyconapac2023
発表資料
こちらのスライドを追いました(アーカイブ視聴はまたの機会に)
フォーマッタはどのように動作するのか
3章構成でした。
Pythonコードの解析
AST(抽象構文木)から話が始まります。
これは私が興味を持っているトピックでもあります2
フォーマッタは半角スペースなどを扱いますが、抽象構文木には半角スペースが含まれません。
そこで具象構文木(CST)を扱います。
具象構文木を扱うライブラリがLibCST!
Instagramが開発してるんですね。
コードパターンとのマッチ
Matcher3とVisitorという2つの概念が紹介されます。
+
演算子を扱うVisitorの例
- Visitorを定義(
cst.CSTVisitor
を継承したクラス) - 2つのメソッド visit_Add / leave_Add を定義
+
演算子の登場回数を数える
% python visitor_example.py counting Add number 1 counting Add number 5
nodeを出力してみたところ、+
演算子と前後のwhitespaceが木構造で示されていました!
counting Add number 1 Add( whitespace_before=SimpleWhitespace( value=' ', ), whitespace_after=SimpleWhitespace( value=' ', ), )
Pythonコードを書き直す
Visitorはread onlyなので、writeもできるTransformerを使います。
Visitor同様に継承し、visit_Add / leave_Add を定義します
スライドを離れますが、Visitorでのprint出力を見たことから、「visit/leaveのどちらかで、+
の前後のwhitespaceを常に1個になるようにupdateしちゃえばいいのでは」と思ったんですよね
% python transformer_example.py 1 + 2 + 3 4 + 5 6 + 7 print("ham" + "egg+")
フォーマットできた!!
Blackはこういう仕組みで動いてるってことか〜
終わりに
Cheuk Ting Hoさんによるトーク「Reformating your code without AI」のスライドを元にLibCSTを触りました。
LibCST、めちゃめちゃ便利ですね。
半角スペースまで含んだ木構造なのがとってもありがたい!
「Blackの実装って、私の理解が及ばない深淵なことをやってるんだろうなあ」と勝手に神格化してましたが、LibCSTを知ったことで「読めそう」「理解できそう」と思えています。
こういう技術的な出会いもあるから、カンファレンスっていいですよね
Thank you for your presentation👏👏
P.S. Cheuk Ting Hoさんは11/15(水)のみんなのPython勉強会でも話していただきます!
11月のみんなのPython勉強会はGlobal Meetup!
"Looking back PyCon APAC 2023"(PyCon APAC 2023 ふりかえり)
15日水曜日 19時からオンライン開催!
スピーカーは
- Cheuk Ting Hoさん『Python security and you(Pythonのセキュリティとあなた)』
- Yung-Yu Chenさん『PyCon, Taiwan, APAC, and scientific programming』
- PyCon APACでも話されています。「Write Python for Speed」
日本語への逐次通訳があるのでご安心ください。
司会が概略を日本語に訳して視聴者にお届けします。
私もGPTの力を解き放つぞ〜(5月以来のチャットサポート)
LT(日本語)も3本あります!(お申し込みありがとうございます)
「気になってきた〜」という方、Global Meetupでお会いしましょう!