2020-04-30: Crystalの型まわりのパーサを書き直した
やったこと
diary
unicorn/no-nullというルールのせいでeslint-plugin-unicornがアップデートできていなかったので、これを無効にしてマージした。
この手のルールはフレームワークと使うのに相性が悪すぎるので仕方ない。
シャニ
Pカップが終わった。
世界に平和がもたらされる‥‥。
SSR2倍はヤバイですね☆
https://twitter.com/make_now_just/status/1255829968442978305
Crystal
Crystalの型まわりのパーサを書き直した。
https://github.com/crystal-lang/crystal/pull/9208
これは前々からやりたいと思っていたことで、この修正でかなりのバグが直ったのではないかと思う。
問題点は、完全に書き直す必要性を理解できる人がどれだけいるか、ということ。
現在のCrystalの型部分のパーサは大体、コンマ区切りで型を読んでいって、->に遭遇したらProc型に切り替える、みたいな挙動になっている。
これだけならまだ単純なのだけど、(A, B) -> Cみたいなパターンに対応するために、これまでに読んだ型を配列で持って、括弧に遭遇したらその配列を渡して再帰的に呼び出している。
ついでに、タプルとかジェネリック型の型引数の場合も横着して(100%横着だと思う)この仕組みを使っているので、様々なところでおかしくなっている。
はっきり言って既存のコードが動いているように見えるのは奇跡なので、全面的に書き直さないといけなかった。
というか、そうじゃなくても配列を持ち回してパースするとか筋が悪すぎるので、そうじゃない方法にすべき。
どうやら今月はcrystal-lang/crystalに15個Pull Requestを出したらしい。
うち11個マージされてるからまあがんばったほう、だと思う。
これ放置してるのどうにかしたいな。
https://github.com/crystal-lang/crystal/pull/8987
というか後半はフォーマッタとパーサしか直してないし性格だなぁ、という感じがする。