From 3977523eb3bd66bd370961280fa54a3dae2c347f Mon Sep 17 00:00:00 2001 From: Jeffery Date: Thu, 17 Sep 2026 06:30:21 +0000 Subject: [PATCH] =?UTF-8?q?fix(=E8=AD=B0=E9=A1=8C=E8=A7=A3=E6=9E=90):=20CR?= =?UTF-8?q?LF=20=E7=9A=84=20body=20=E4=B8=8D=E5=86=8D=E8=AE=93=E6=B8=85?= =?UTF-8?q?=E5=96=AE=E9=9D=9C=E9=9D=9C=E8=AE=8A=E6=88=90=E7=A9=BA=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 瀏覽器送出 textarea 一律用 CRLF,議題只要在 Gitea 網頁上被編輯過,body 逐行切開後 每一行行尾就掛著 \r。JS 的 . 不吃 \r,`(.*)$` 因此整行比不中——listSection 會把 目標、非目標、驗收標準這些段落一律回成空陣列,而且不報錯,下游拿到的是「這一段沒寫」 而不是「解析失敗」。 改用 [\s\S] 比對行尾,text 本來就有 trim 會把 \r 修掉。 Co-Authored-By: Claude Opus 5 (1M context) --- scripts/issue-body.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/issue-body.js b/scripts/issue-body.js index bbff973..c0f63cb 100644 --- a/scripts/issue-body.js +++ b/scripts/issue-body.js @@ -90,7 +90,9 @@ export function listSection(sections, name) { for (const { line, inFence } of eachLine(sections.get(name))) { if (inFence) continue; - const item = line.match(/^\s*(?:[-*+]|\d+\.)\s+(.*)$/); + // [\s\S] 而非 . :CRLF 的 body 逐行切開後行尾有 \r,而 . 不吃 \r, + // 用 . 會讓整行比不中,清單靜靜變成空的。後面的 trim 再把 \r 修掉。 + const item = line.match(/^\s*(?:[-*+]|\d+\.)\s+([\s\S]*)$/); if (!item) continue; const text = item[1].replace(/^\[[ xX]\]\s*/, '').trim();