| name | pj-checklist |
| description | fude.nvim プロジェクト固有の実装・レビューチェックリスト。Lua/Neovim パターン、非同期処理、state 管理の注意点。 |
fude.nvim プロジェクトチェックリスト
このスキルは /self-review から読み込まれ、fude.nvim 固有のチェック項目を提供する。
/develop Phase 3(実装)や /self-review のラウンド1〜2(レビュー)で参照される。
実装チェックリスト
コードを実装する際に確認すべきプロジェクト固有のパターン:
コーディングパターン
- 非同期処理:
vim.system() コールバック + vim.schedule() で安全な UI 更新を行う
- 状態管理:
config.state に集約する。新フィールド追加時は reset_state() での初期化も忘れないこと
- 純粋関数: テスト可能なロジックは
build_*, find_*, parse_*, format_*, should_*, make_*, calculate_* として抽出する
- 名前空間:
"fude" を使用する
Lua 言語固有の注意点
- Lua パターン構文: Lua パターンは正規表現ではない。主な違い:
| 交替なし、エスケープは \ ではなく %(例: %. %()、文字クラスは %d %a %w 等。量指定子は *(0 回以上) +(1 回以上) -(0 回以上・最短一致)のみで、? は量指定子ではなくリテラル ? を表す。CRLF 行末は text = text:gsub("\r\n", "\n") で \r\n を \n に正規化し、必要に応じて text = text:gsub("\r", "\n") で単独 \r も処理する等の段階的な変換で扱う
- Lua 多値返却の漏れ:
string.gsub、string.find 等は複数の値を返す。戻り値として1つだけ必要な場合は括弧で囲む: return (str:gsub(...)) — 括弧なしだと2番目以降の値(置換回数等)が呼び出し元に漏れる
Neovim API 固有の注意点
エッジケースパターン
計画・実装時に検討すべきエッジケース:
- state が nil / 空テーブル / 初期値の場合
- 非同期コールバック中に state が変更される場合(stop 中に API レスポンスが返る等)
- 非同期 state 更新タイミング: async 呼び出しの前に state を更新(楽観的)すると、失敗時に不整合が残る。成功コールバック内で更新(悲観的)するか、失敗時のロールバックを用意する
- 非同期コールバックのセッション identity: コールバック内で
config.state を読み書きする場合、発火時にセッションが同一であることを保証する。手順:
- 実装する関数内の全コールバック(
vim.system callback, vim.schedule, timer callback)を列挙する
- 各コールバックで
stop() → reset_state() が呼ばれている可能性を検討する
- 関数冒頭で
local captured_state = config.state を取得し、コールバック内で if config.state ~= captured_state then return end で打ち切る
- early return する場合、未解放のフラグ(
reloading 等)がないか確認する。旧 state テーブルのフラグは不要だが、config.state のフラグは解放が必要
- PR #84 実例:
reload() でセッション不一致 early return → reloading が永続的に true のまま残った
- ウィンドウやバッファが既に閉じられている場合
- ウィンドウレイアウトの境界値: 小さいターミナルサイズで幅/高さが負や0になりうる計算。
nvim_open_win に渡す前にクランプが必要か検討する
- 複数回連続で呼ばれた場合(二重呼び出し防止)
- データ往復整合性: データを保存するパスがある場合、対応する読み込み・復元パスも存在するか確認する
レビューチェックリスト
diff を以下の観点で確認する。過去のPRレビュー56件の分析に基づく頻出指摘パターン:
ドキュメント整合性(最頻出 — 全指摘の25%)
コード品質
堅牢性
テスト