generated at
✅状態遷移再設計 (scrapbox-select-suggestion)

reducerにページ本文や選択範囲変更時の状態遷移処理まで含めた
takker99/emoji-completionで試すevent loop設計にあるようなループをすべて単体テストできるようになった

修正が期待できるバグ
scrapbox.Page.linesからリンク検知するよう変更した
あれ?これ以前話題にでたような……
また強い既視感が……
でもタイミングはずれそう
もしずれるようなら、debounceを挟もう

まとめてやったこと
カーソルを含むリンクを、scrapbox.Page.linesから探索する
DOM経由よりバグが少ない
状況によって微妙に構造が変わってしまう
場合分けしてコードを書くのが面倒
単体テストできる
domの場合だと、UserScriptとして読み込んで実際に使ってみてからでないとバグを発見できない

状態遷移図を書き出すつもりだったが、またメモを残さずに頭の中でcodingしてしまった

2023-03-23
18:25:31 補完確定処理がおかしい
テスト中に気づかなかった……
確定処理はこれ
break pointを仕掛けて調べる
どうやら updator の処理を間違えているようだ
d _ に変換する関数
updator には Completion.tsx confirm が代入されている
わかった。 query [] を抜いてしまっているから、 [] 分文字数を足さないと行けなかったんだ
query から [] 取るのやめようかな……紛らわしいし。
18:43:19 治った
18:12:50 merged
16:11:09 PR branchをbuildして動作確認する
17:56:45 windowの位置がずれてしまっているのを直す
position.char ではなく start を使う
18:07:55 直した
17:34:53 ↓の useEffect() が大量にcallされてた
selection useSelection が実行されるたびに再生成されていたのが原因
selection.range を監視するように直した
16:51:09 windowがちらつく
右下のdebug用表示を見ると、 completion がそれ以外のmodeに僅かな間だけ切り替わっているのがわかる
debounceしよう
このケースでは、必ず cursor:changed lines:changed の順に呼び出されることが分かっている。
cursor:changed の次に lines:changed が呼び出されたときのみ、 cursor:changed を省略するようにしよう
いや、 cursor:changed だけdebounceしてもいいか
ほかはdebounceなしに実行する
いや、 scrapbox.Page.lines を高頻度で呼び出したくないから、debounceは仕掛けておこう
requestAnimationFrame()でdebounceする
17:55:59 治った
最終的に、setTimeout()でdebounceした
待ち時間を動的に変えたかったので
16:23:27 なぜか display: none になってる
表示制御は <App /> でやるので、 <Completion /> で制御する必要はない
コード削除しそこねてたか。消そう
候補がなかったときに非表示にするロジックが暴走している
candidatesProps はrenderされていたので、 top left が取得できなくなっているみたい
16:49:57 useRef() ref.current の更新をuseEffect()に入れていなかったのが原因
状態を表示するdebug codeはこんな感じのを使った
ts
const { render } = useMemo(() => useStatusBar(), []); useEffect(() => { render({ type: "text", text: `${state.type}${ state.position ? `: ${state.position.line}, ${state.position.char}` : "" }`, }); }, [state.type, state.position?.line, state.position?.char]);
16:09:58 単体テスト作成完了
大体はカバーできたはず
まだ抜けはありそうだが……
場合分けが多くて、書くのが大変だった
PRを作った
14:20:05 crawlLink()にバグが有ったので修正中
単体テスト項目を増やした
どうやら indent の文字数を無視してしまっているらしい
13:17:09 復帰
11:52:34 Selection Cursor まわりの型定義修正
12:54:06 修正終了
けっこうかかった
Page の型定義は、真面目にやっても現状メリットがないので、適当に済ませた
13:07:09 released
10:03:26 テスト用行データをjsonに切り出し中
09:54:42 作業開始

#2023-03-24 14:20:54
#2023-03-23 16:12:01
#2023-03-21 20:33:25
#2023-03-18 21:33:11
#2023-03-17 23:10:03