概要
electron/main/ipc/search.ts:530-538 の fileMap build で basename(filePath).replace(/\.md$/i, "").normalize("NFC") を使っている。正規表現 .replace(/\.md$/i, "") は同 file の line 512 で既に採用済の endsWith('.md') + slice(0, -3) pattern と統一すれば、regex eval を回避できる。
1k file workspace では +N 回の regex eval / NFC normalization。allocation 効果は微小だが、scripta は walkMdFiles で小文字 .md のみ対象にしているため、case-insensitive な .replace(/\.md$/i, "") も不要 (endsWith('.md') で十分)。
背景
PR #235 の /code-review max Efficiency 軸で検出。同 file 内で 2 つの pattern が混在しているため、convention 統一が目的。
// search.ts:512 (既存 pattern、採用済)
if (!targetBase.endsWith(".md")) return [];
const targetPage = targetBase.slice(0, -3).normalize("NFC");
// search.ts:530-538 (該当箇所、未統一)
for (const filePath of inFiles) {
const name = basename(filePath).replace(/\.md$/i, "").normalize("NFC");
if (!name) continue;
const existing = fileMap.get(name);
...
}
要件
search.ts:532 の .replace(/\.md$/i, "") を slice(0, -3) に置換。walkMdFiles で小文字 .md のみが対象 (line 28) なので case-insensitive 不要。
// After
for (const filePath of inFiles) {
const base = basename(filePath);
if (!base.endsWith(".md")) continue; // walkMdFiles で保証されるが defensive
const name = base.slice(0, -3).normalize("NFC");
if (!name) continue;
...
}
または、walkMdFiles の guarantee に頼って endsWith check は省略:
const name = basename(filePath).slice(0, -3).normalize("NFC");
動作確認ポイント
関連ファイル
electron/main/ipc/search.ts:530-538
e2e/helpers/electron-api-mock.ts:796 (mock 側の対称箇所、対応可)
参考
- PR #235 の skip 別 issue 候補 4
/code-review max Efficiency (Phase 1)
概要
electron/main/ipc/search.ts:530-538の fileMap build でbasename(filePath).replace(/\.md$/i, "").normalize("NFC")を使っている。正規表現.replace(/\.md$/i, "")は同 file の line 512 で既に採用済のendsWith('.md') + slice(0, -3)pattern と統一すれば、regex eval を回避できる。1k file workspace では +N 回の regex eval / NFC normalization。allocation 効果は微小だが、scripta は walkMdFiles で小文字
.mdのみ対象にしているため、case-insensitive な.replace(/\.md$/i, "")も不要 (endsWith('.md')で十分)。背景
PR #235 の
/code-review maxEfficiency 軸で検出。同 file 内で 2 つの pattern が混在しているため、convention 統一が目的。要件
search.ts:532の.replace(/\.md$/i, "")をslice(0, -3)に置換。walkMdFilesで小文字.mdのみが対象 (line 28) なので case-insensitive 不要。または、
walkMdFilesの guarantee に頼ってendsWithcheck は省略:動作確認ポイント
pnpm testで全 search 関連 test passpnpm typecheckcleane2e/helpers/electron-api-mock.ts:796) も同 pattern なので対称に統一を検討関連ファイル
electron/main/ipc/search.ts:530-538e2e/helpers/electron-api-mock.ts:796(mock 側の対称箇所、対応可)参考
/code-review maxEfficiency (Phase 1)