2022-11-27

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

krymtkts/pocof の話。

前回書いた、 composite query の実装をした。 #9

デフォルトでは and で複数のクエリを合成するようにしてる。 一応理由がある。 最初から or だと絞り込む前の状態を覚えていて、追加でほしい候補のためにクエリを書くような使い方になる。 そういう使い方もできるが、ちょっと上級者感がするので、まずは見える範囲で徐々に候補を絞り込めるような and をデフォルトとすることにした。

そのうちショートカット含めた初期値の変更にも対応したいと思ってたし、起動時から or にしたい場合はそこに盛り込めたらいい。

ただこの and での合成は hashtable を絞り込むときに出来が悪くて、まだ思ったような絞り込みになっていない。現状 hashtable は or でのみ気持ちよく絞り込むのができなかった。

これは、 List.allPairs した複合クエリの List × エントリの List に and の場合は List.forall or の場合は List.exists してることで、 hashtable はエントリ Key-Value の二要素あるので and だと両方に共通の文字がないと釣れない...となっているため。 正しくは、 エントリ内の検索候補プロパティは or で、各エントリ毎は and / or のモードを適用できるようにするのが良いか。 プロパティ指定の絞り込みするときにこの問題対処するの必須。

あと like matcher のときだけクエリが空の状態でもフィルタリングされて表示が 0 件になる挙動を直した。 #10

流石に初期表示が 0 件だとはじめ何で絞り込んだらいいんや...(wildcard 埋めたらいいだけやけど)と困惑するので、はじめは全件表示する。

最後に、今回 PowerShell Gallery に公開する時手間取ったのが、 platyPS

前にモジュールの掃除した影響で platyPS の version 2 preview より前のモジュールを消し去ってた。 コレにより New-ExternalHelp Cmdlet がなくなっていて、 psake のリリーススクリプトがエラーするようになってた。 全く想定外。 v2 で消えるのかこの Cmdlet ??て感じ。 まだ README.md に消えるような話書いてないし、対応待ってたらいだけなんかな ↓↓

Create external help xml files (MAML) from platyPS Markdown.

とりあえず preview でない platyPS を使うことで回避した。 pocof に v1 刻むときにはヘルプファイルもきれいにする必要があるし、その時までに platyPS が v2 でほんとに Cmdlet 失われるのかとかチェックする必要が出てきた。