2022-12-18

F#でコマンドレットを書いてる pt.10

krymtkts/pocof の話。

少しだけ pocof のプロパティ指定検索対応を進めた。

PSCmdlet.ProcessRecord のときに PSObject.Properties から PSPropertyInfo.Name を取り出して Set<string> の変数に格納する。 その変数を画面の描画のときに通知領域のところに出すまでを実装した。うまく出てるのを見てみようということだ。

当然のごとく、常時プロパティの補完候補が出ているのはヘンなので、クエリの入力状況に応じた表示&プロパティ候補表示 ON/OFF のオプションの追加が必要になる(のが見えてきた。行き当たりばったり)。

ここで「クエリの入力状況」と書いたが、「プロパティ指定子」(poco に倣い既定で : を検討している)が入力されていて、かつカーソルがその「プロパティ指定子」に連続する文字列のポジションにある時が、「プロパティ入力」。つまり入力中のクエリとカーソル位置でモードを切り替える必要がある。

これ結構めんどくて、クエリとか内部状態として持っているレコードにモードを足して、あとキー押下時やカーソル移動のそれぞれのアクションでモードの ON/OF をやらないといけない。

もう他にも面倒なやつらしかないんやけど、今とりあえずプロパティ指定検索では以下を実装しようとしている。

  • オプションにプロパティ候補 ON/OFF を追加する

  • 内部状態に入力モード(通常・プロパティ)を追加する

  • 「プロパティ入力モード」のときに

    • プロパティのタブ補完できるようにする

    • プロパティ名入力に合わせてプロパティ表示を絞り込み

  • InputObject のプロパティ指定検索対応

途中 PSPropertyInfo の型に合わせて入力の検査をしたら...とか思い始めたが、これ今やるのは違うわ今はいいわと思って虚無に帰した。やったら楽しそうなので、そのうち復活してくるかも。 他にも湧いては消え × N するアイデアはポツポツあるので、プロパティの対応が終わったらボチボチ真面目に検討できるようになるかなー。


試しに実装してみて、使い勝手を検証して、更に実装していく。

これまさにプロトタイピングなのだけど、それなら紙芝居でもいいのでは...という気はしなくもない。 が、紙芝居で作ったらすぐさま試用できるモノが手に入らないので、常に動くものを持てるこっちの方法が楽しい。仕事で気分任せに進めるとヤバい(終わりのないプロトタイピングで金食い潰すとかヤバい)けど趣味プロは誰にも邪魔されない。

とは言えこのアプローチは継ぎ足し〃の九龍城砦になりがちなので、都度再構築されて然るべきなんだろうとひしと感じている。出発点が PowerShell から F# への写経だったのもあって、当初から微妙と感じるところがいくつかあるのと、 F# の腕が悪いのもあってかっこよくないところとか。来年に持ち越しかなー。これも楽しいのでやりたいけど、先にプロパティを始末したい。