本日Azukiの不具合修正版1.6.2をリリースしました。一応当日のブログなので一言触れておきます 🙂
ここのところ悩んでいるのは3/13にも本ブログで記した「行ごとの編集状態」です。もともと想定していた範囲を超える仕様であることは良いとしても、「ここまで複雑になるのか」と思うほど複雑です。紙に図をつらつらと書き記しながら設計し、仮実装して検討不足に気づき失敗に終わり。これを何度も繰り返している状態です。うむむ…手強い。
手強くしている原因の一つには、Azukiにおけるすべてのテキスト編集処理を実装しているDocument.Replaceメソッドのコードが老朽化してきていることが挙げられます。このメソッドはAzukiプロジェクトの中で、もっとも古いコードの一つです。2007年の12月に開始したプロジェクトですからもう3歳を超えていますね。ここは基礎の部分なので大きな変更を気軽には入れられず、慎重になった結果、過去にUndo/Redo機能を追加した際も「行ごとの編集状態」表示機能を追加した際も、アドホックな形で修正を加えました(ちなみに今回もアドホックな対応にしようと考えています…再設計は相当な高リスクと考えているので)。そして現在、大きなリファクタリングを伴わない修正が積み重なったためコードが複雑化し、同メソッドの処理内容を擬似コードでも簡単に記せないほど処理が入り組んでいます。擬似コードでサクッと書けるほどシンプルな作りであれば、おそらく何日も前に完成していると思うのですけれども…。
1.6.3で「行ごとの編集状態」の問題は解決したいのですが、最悪の場合は見送りにせざるをえないかもしれません 🙁
(リファクタリングするのは2.0だろうなぁ…コードフォールディング機能を実装するには大規模な再設計が必要になると思うので、その際にやるしかないか。)