Skip to content

refactor: BacklinkSource に displayName / displayPath field を追加 (#239)#252

Merged
ymnao merged 1 commit into
mainfrom
refactor/backlink-source-display-fields-#239
Jun 27, 2026
Merged

refactor: BacklinkSource に displayName / displayPath field を追加 (#239)#252
ymnao merged 1 commit into
mainfrom
refactor/backlink-source-display-fields-#239

Conversation

@ymnao

@ymnao ymnao commented Jun 27, 2026

Copy link
Copy Markdown
Owner

概要

BacklinkSource (IPC 境界 type) に displayName / displayPath を追加し、scanBacklinksImpl で workspacePath / sourceFile から 1 度だけ計算して payload に乗せる。BacklinkPanel.tsx の毎 render basename / toRelativePath 計算 (per-source × per-render) を scan-time hoist で削減する Issue #239 Option A 実装。

関連 Issue

closes #239

移行 Stage

(該当 stage なし — IPC payload 最適化 / quick win refactor)

  • Stage 0: 雛形 + フロント表示確認
  • Stage 1: ファイル I/O
  • Stage 2: ワークスペース・ファイルツリー・ファイル監視
  • Stage 3: 全文検索(ripgrep sidecar)
  • Stage 4: Git Sync
  • Stage 5: OGP / PDF / アップデート
  • Stage 6: 仕上げ・配布・切り替え

変更内容

  • src/types/wikilink.ts: BacklinkSourcedisplayName: string / displayPath: string 追加 (scan-time hoist 済 derived field、意図をコメントで明示)
  • electron/main/ipc/search.ts:
    • scanBacklinksImplresult.pushbasename(sourceFile) / toDisplayPath(workspacePath, sourceFile) を計算して埋める
    • toDisplayPath は main 側 entry-filter.ts:toRel と同じ node:path.relative + sep pattern を採用 (renderer 側 src/lib/path.ts:toRelativePath の手書き再実装を回避)
  • src/components/search/BacklinkPanel.tsx:
    • 毎-render basename / toRelativePath 計算を削除し src.displayName / src.displayPath を直接読む
    • inline 計算が消えたため map callback を block return → expression return に変換
    • 未使用 import toRelativePath を削除
  • e2e/helpers/electron-api-mock.ts: scanBacklinks mock の return shape を本番と対称に拡張 (addInitScript 制約で import 不可なため inline 実装)
  • src/stores/backlink.test.ts: mkSource(sourceFile, references = []) helper を追加し 7 sites の mock data を集約 (将来の BacklinkSource field 追加時の touch point を 1 箇所化)

動作確認

  • vitest run 全 2230 test pass / 0 fail (98 test files)
  • tsc --noEmit 3 config clean (node / web / e2e)
  • biome check clean (既存 biome.json deprecation 2 infos のみ、本 PR 差分起因なし)
  • /code-review low (none) — production hunk 3 file に runtime bug 該当なし
  • /simplify 4 reviewer 並列: 採用 2 件 (toDisplayPath を Node relative() + sep ベースに簡略化、backlink.test.tsmkSource helper 化)、見送り 6 件

スクリーンショット

(UI 変更なし)

- scanBacklinksImpl で workspacePath / sourceFile から 1 度だけ計算する
  scan-time hoist field を追加し、BacklinkPanel.tsx の毎-render
  basename / toRelativePath 呼び出しを削減
- main 側 toDisplayPath は entry-filter.ts:toRel と同じ Node 標準 relative + posix
  正規化 pattern を採用 (renderer 側 toRelativePath の手書き再実装を回避)
- e2e mock (electron-api-mock.ts:scanBacklinks) も対称に対応
- backlink.test.ts に mkSource helper を追加し 7 sites を集約 (将来の
  BacklinkSource field 追加時の touch point を 1 箇所化)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ymnao ymnao merged commit 9162cad into main Jun 27, 2026
9 checks passed
@ymnao ymnao deleted the refactor/backlink-source-display-fields-#239 branch June 27, 2026 16:06
ymnao added a commit that referenced this pull request Jun 28, 2026
#254)

- IPC 境界 type に UnresolvedWikilinkReference extends WikilinkReference { displayPath: string } を追加
- scanUnresolvedWikilinksImpl で file 単位 hoist で displayPath を 1 度だけ算出 (PR #252 BacklinkSource と同 pattern)
- UnresolvedLinksPanel の per-render toRelativePath 計算を削除し reference.displayPath を直接読み
- e2e mock の displayPath 計算 (scanUnresolvedWikilinks / scanBacklinks の 2 箇所) を mockDisplayPath helper に集約 (/simplify Reuse 採用)
- test mock 1 site に displayPath 追加

Co-authored-by: Claude Opus 4.7 (1M context) <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: BacklinkSource に displayName / displayPath field を追加し render-time basename/toRelativePath を hoist

1 participant