トレイトで遊ぶための最低限のブラウザ拡張


Squeak3.9 で Traits(トレイト)を扱うにあたっては、公式には OmniBrowser を使え…ということになるのでしょうが、ちょっと試した感じ、残念ながら OmniBrowser は私の手にはなじまないようです。そこで、使い慣れたクラシカルなシステムブラウザでも、トレイトをさほどストレスなく使えるように、これに最低限の拡張を施してみました。なお、このチェンジセットには id:sumim:20070412:p1 で触れた「新規トレイト作成用のテンプレートをクラスブラウザに出させるための細工」と id:sumim:20070425:p1 で触れた CompiledMethod のフィックスも含まれています。

  • minimalBrowserEnhForTraits.cs.gz (← クラスメソッドブラウズ時、正常に機能しませんでした。すみません)
  • minimalBrowserEnhForTraits.1.cs.gz

選択トレイトを use しているクラスやトレイトを一覧する機能の追加

既存のトレイトを編集するときには、念のため、あらかじめ、すでにそれを use しているクラスやトレイト(既存のユーザー)と、そこでどんなふうに利用されているのかを知っておくべきでしょう。そこで、ブラウザでトレイトをブラウズしている時に class refs (N)、alt/cmd + shift + N でそのユーザーを一覧するブラウザを呼び出せるようにしました。テキストエディタでの、トレイト名を(必要ならタイプして)選択 → alt/cmd + shift + N も同様に利用できます。


使用中のトレイトにより供給されたメソッドのメソッド名を斜字にする

クラシカルなシステムブラウザでは、トレイトで供給されたメソッドと、ブラウズ中のクラス(メソッドを供給しているトレイトのユーザー)自身に定義されたメソッドとの区別がつきません。そこで、メソッド名一覧(メッセージリスト)ペインで、トレイトにより供給されたメソッド、および、コンフリクトにより自動生成されたメソッドは斜字で表示させます。


プロバイドされたメソッドをブラウズするためのメニュー項目の追加

トレイトに供給(プロバイド)されたメソッドは、プロバイド先のクラス(トレイトのユーザー)からはブラウズはできても、編集して変更することができません(編集して accept しても、編集後のメソッドは同名の新しいメソッドとしてそのクラスに定義され、プロバイドされていたメソッドを遮蔽してしまいます)。そこで、ブラウズ中のプロバイドされたメソッドを直接編集できるブラウザを開くための機能を、メソッド名一覧ペインの黄ボタンメニューに browse provided として追加します。


プロバイドされたメソッドを編集して accept したときにアラートをポップアップ

プロバイドされたメソッドを編集しているつもりで、うっかり、そのユーザークラスへのメソッド定義になってしまわないように、accept 時に警告を発します。


コンフリクトしているメソッド群をブラウズするためのメニュー項目の追加

トレイト機構は、メソッド名の衝突があるとコンフリクトメソッドを自動生成し、それを改めてクラスに供給します。どのトレイトのどんなメソッドたちがコンフリクトしているのかをブラウズできる機能を、メソッド名一覧ペインの黄ボタンメニューに browse conflicts として追加します。