Skip to content

refactor: settings store の 11 setter を makeSetter factory で集約 (#271)#273

Merged
ymnao merged 1 commit into
mainfrom
refactor/settings-setter-factory-#271
Jul 1, 2026
Merged

refactor: settings store の 11 setter を makeSetter factory で集約 (#271)#273
ymnao merged 1 commit into
mainfrom
refactor/settings-setter-factory-#271

Conversation

@ymnao

@ymnao ymnao commented Jul 1, 2026

Copy link
Copy Markdown
Owner

概要

src/stores/settings.ts に定義された 11 個の setter (setShowLineNumbers / setFontSize / setAutoSaveDelay / setHighlightActiveLine / setFontFamily / setTrimTrailingWhitespace / setShowLinkCards / setScratchpadVolatile / setAutoUpdateCheck / setFileTreeShowHidden / setFileTreeExcludePatterns) が全て同一 3 行 pattern (void saveXxx(val); set({key: val});) だったため、create() 内 closure factory makeSetter<K extends keyof SettingsValues> を定義し 11 setter を 1 行呼び出しに置換。

関連 Issue

Closes #271

移行 Stage

Stage 分類外(Electron 化完了後の内部品質改善)。

変更内容

  • src/stores/settings.tscreate() 内 closure factory makeSetter<K extends keyof SettingsValues>(key, save) を追加
  • 11 setter を factory 呼び出し(1 行)に置換
  • 外部 API は完全に一致(呼び出し側コンポーネント / hook / test に変更なし)
  • generic factory で key と value の型対応を静的保証(tsc で wrong-variable copy-paste 検出可能)
  • Diff: 1 file / +36 -60(net -24 行)

動作確認

  • biome check clean
  • typecheck 3 config (web / node / e2e) clean
  • vitest 2230 pass / 2 skipped
  • src/stores/settings.test.ts 14 pass
  • /code-review low: (none)
  • /simplify pass 1(4 reviewer): 本 PR scope 内は (none)
  • /code-review medium(8 finder): all [](correctness / cleanup / conventions 違反なし)

検討事項

/simplify の Reuse / Altitude reviewer が「makeSettersrc/lib/store-helpers.ts に hoist して git-sync.ts の 7 setter と共通化」を指摘(HANDOFF 49 ★「次 PR で 2 箇所目が発生したら helper 化」基準成立)。本 PR は user 明示採択 scope(settings.ts 1 file)から逸脱するため対応せず、follow-up issue #272 を起票済(次 PR で makePersistedSetter<TValues, K> を generic hoist + git-sync.tssetCommitMessagenormalize? optional transform を追加予定)。

スクリーンショット

UI 変更なし。

src/stores/settings.ts で 11 個の setter (setShowLineNumbers /
setFontSize / setAutoSaveDelay / setHighlightActiveLine / setFontFamily /
setTrimTrailingWhitespace / setShowLinkCards / setScratchpadVolatile /
setAutoUpdateCheck / setFileTreeShowHidden / setFileTreeExcludePatterns)
が全て同一 3 行 pattern (void saveXxx(val) + set({key: val})) だったため、
create() 内 closure factory `makeSetter<K extends keyof SettingsValues>` を
定義し 11 setter を 1 行呼び出しに置換。

- generic factory で key と value 型の対応を静的保証 (tsc で wrong-variable
  copy-paste を検出可能)
- scope は file-private (create() 内 closure)
- 挙動同一 (void save() → set({key: value}) の順序と semantics 維持)
- vitest 2230 pass / 2 skipped, settings.test.ts 14 pass, biome/typecheck clean

Closes #271
@ymnao ymnao merged commit b9829a2 into main Jul 1, 2026
9 checks passed
@ymnao ymnao deleted the refactor/settings-setter-factory-#271 branch July 1, 2026 13:41
@ymnao ymnao mentioned this pull request Jul 5, 2026
7 tasks
ymnao added a commit that referenced this pull request Jul 5, 2026
- package.json の version を 0.6.0 → 0.7.0 に bump
- CHANGELOG.md に v0.7.0 エントリを追加 (#243#280)
  - Fixed: FileTree scroll regression (#276)、electron e2e launch teardown timeout 拡大 (#247)
  - Internal: #209 3 項目 (drift-lock 系 refactor #278/#279/#280)、settings setter 集約 (#273#277)、search/workspace/backlink 系 helper 抽出 15 件
  - Dependencies: electron 43.0.0 / p-limit 7.3.0 major bump (#275)、Dependabot 7 件 combine (#274)、pnpm-workspace.yaml overrides で @codemirror dual copy を恒久防止

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: settings store の 11 setter を makeSetter factory で集約

1 participant