2020-04-28: Crystalめんどくせえ
やったこと
プリコネ4話
観た。安定の面白さ。最終的にどこに向かうのかよく分からないが。
マギレコみたいに2クールやる気か?
リマの美少女化、アニオリなのか‥‥。
あとモブの2人が出ないからちょっと悲しかったけど、中の人が同じ2人組みの盗賊が出てきて安心した。
Crystal
2回目のWeekly Crystal-JPでat-grandpaさんが言ってたcrystal tool formatのバグについて考察していた。
で、その成果。
フォーマッタはヒアドキュメントの開始デリミタのカラム位置に対して、フォーマットされたときのカラム位置の方が小さいときに、そちらに揃えるためにヒアドキュメントの中身をその差分だけ(可能なら)インデントを削る。
つまり、次の例の場合、ヒアドキュメントの内容はずつ2文字削られる。
# フォーマット後はこの位置に開始デリミタがくる
# <<-FOO
a = <<-FOO
foo
FOO
これには2つの問題点がある。
- この処理がキーや変数名のアラインメント修正の前に行なわれる。アラインメント修正によって開始デリミタが後ろに移動しても、それが反映されない。
- ヒアドキュメントの内容のインデントを削る際に、削れるかどうかを各行毎に判定している。これによってインデントが崩れるどころかヒアドキュメントの内容が変更される可能性すらある。
at-grandpaさんの報告した問題は1が原因で、
- 1回目のフォーマット: アラインメント修正によって開始デリミタが後ろに移動する(1回目のフォーマット)
- 2回目のフォーマット: アラインメント修正を考慮していないのでヒアドキュメントの内容のインデントが削除される
ということが起きている。
これをどうやって直すかが問題なんだよな‥‥。
考えをまとめるモチベが沸かない‥‥。