ScrapVim-lite-3/ParseState
これクラスではなく関数でも良くないか?
毎回生成と破棄を繰り返す
こっちの方がシンプルで良さそう
というわけで変更する
/icons/hr.icon
具体的なStateは派生クラスで定義する
クラスの継承ではなく、おんなじinterfaceを持たせればいいんじゃないかな
/icons/typescript.iconならinterfaceを使う手段があるけど、/icons/javascript.iconだとそういうのないし
共通部分が多くなりそうだったら、クラスの継承を使うことにする
具体的なStateは別々のclassとして定義する
それぞれoperator, countなどVimのcommandの種類と対応させる
このページではParseStateの共通する仕様を書く
必要な機能
this.evaluate()
解析したcommandを格納する変数
this._vimCommand
this.evaluate()内部で更新する
更新方法は具体的なstate classに任せる
{type: 'ready to execute'}と{type: 'change states'}のときに外部に渡す
必要なときだけ実装する機能
2文字以上で構成されるcommandの場合に必要
OperatorState以外で必要になるだろう
外部から注入するもの
設定ファイルを用いてcustomizeできるようにするために、対応表を別のclassに持たせておく
対応表をどう作るか考えないといけないのか
単純なstring - VimCommandの対応ではない
作成するParseStateの一覧
OperatorState
defaultはd,c,y
確定後[CountState, MotionState]に移行する
MiscCommand
Normal Modeで単独で使用されるcommad
<C-f>やH,>>など
MotionState
CountState
繰り返しを指定する数字を入力するState
そうか、これ数字以外で中断して、中断に使用した文字を次のstateに渡さないといけないのか
数字が一つ入力されるごとに次のstateを生成すれば、同じlogicを使えそう
https://gyazo.com/8205ddebb4c55d49400a8225e10bda7c
performanceが気になるけど、後回しだ
後でtuningできる箇所として、余裕を持たせておく
あとはCountStateそのものを使い回すとか、いろいろtuningできそう
予めどのstateに遷移できるのか、constructorで指定しておく必要がある
破棄してしまう以上使い回せないので、objectそのものではなくnewする関数を渡す