ScrapVim-lite-3/ParseState
これクラスではなく関数でも良くないか?
毎回生成と破棄を繰り返す
引数で前ターンまでに解析したVimCommand, ScrapVim-lite-3/command文字列, を受け取り、返り値に次のターンで使う関数か、実行可能なリストを返す
こっちの方がシンプルで良さそう
というわけで変更する
ScrapVim-lite-3/ParseStateFunction
/icons/hr.icon
ScrapVim-lite-3/Mode内で実際にScrapVim-lite-3/command文字列を逐次解析し、対応するcommandを生成するクラス
1文字づつ解析し、そのたびに解析状態を示すScrapVim-lite-3/ParseResponseを返却する
具体的なStateは派生クラスで定義する
クラスの継承ではなく、おんなじinterfaceを持たせればいいんじゃないかな
/icons/typescript.iconならinterfaceを使う手段があるけど、/icons/javascript.iconだとそういうのないし
共通部分が多くなりそうだったら、クラスの継承を使うことにする
具体的なStateは別々のclassとして定義する
それぞれoperator, countなどVimのcommandの種類と対応させる
このページではParseStateの共通する仕様を書く
必要な機能
与えられたScrapVim-lite-3/command文字列を解析する関数
this.evaluate()
ScrapVim-lite-3/ParseResponseを返す
解析したcommandを格納する変数
this._vimCommand
this.evaluate()内部で更新する
更新方法は具体的なstate classに任せる
{type: 'ready to execute'}と{type: 'change states'}のときに外部に渡す
必要なときだけ実装する機能
解析開始時点から渡された全てのScrapVim-lite-3/command文字列をつなげたやつ
2文字以上で構成されるcommandの場合に必要
OperatorState以外で必要になるだろう
外部から注入するもの
ScrapVim-lite-3/command文字列と実際のcommandとの対応表
設定ファイルを用いてcustomizeできるようにするために、対応表を別のclassに持たせておく
対応表をどう作るか考えないといけないのか
単純なstring - VimCommandの対応ではない
ScrapVim-lite-3/command文字列とVimCommandとの対応リスト
作成するParseStateの一覧
OperatorState
operator command (vim)を扱う
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できる箇所として、余裕を持たせておく
cf. /shokai/検索や推薦をWebWorkerでやる#5a8fe6e997c2910000f4599c
あとはCountStateそのものを使い回すとか、いろいろtuningできそう
予めどのstateに遷移できるのか、constructorで指定しておく必要がある
破棄してしまう以上使い回せないので、objectそのものではなくnewする関数を渡す
ScrapVim-lite-3/ParseStateの設計案 (旧)
#2020-12-17 05:46:54
#2020-12-13 07:03:16