fix(lib): 讓 --key=value 的值可以本身以 -- 開頭

commit 訊息與 PR 描述裡出現 --flag 是常態,而原本的檢查對兩種寫法一視同仁:值只要以
-- 開頭就報「需要一個值」。空格分隔的寫法確實分不出「值」與「打錯的 flag」,但等號寫法
沒有這個歧義,不該一起擋掉。

這是實際撞到的:拿 commit-split 提交它自己時,--body 的內容第一行就是「--repo 與
--issue-repo 的差別」,整個 commit 因此做不出來。空格寫法的錯誤訊息現在會指路到等號寫法。
This commit is contained in:
2026-09-17 08:23:27 +00:00
parent 95e6026950
commit 1c6e7f85bb
+12 -3
View File
@@ -99,10 +99,19 @@ export function parseFlags(argv, spec = {}) {
flags[name] = true; flags[name] = true;
continue; continue;
} }
if (eq === -1) i += 1; if (eq !== -1) {
const value = eq === -1 ? argv[i] : arg.slice(eq + 1); // --key=value:等號右邊就是值,即使它本身以 -- 開頭也沒有歧義。
// commit 訊息、PR 描述這種內容裡出現 --flag 是常態,不該因此被當成打錯 flag。
flags[name] = arg.slice(eq + 1);
continue;
}
i += 1;
const value = argv[i];
if (value === undefined || value.startsWith('--')) { if (value === undefined || value.startsWith('--')) {
throw new ScriptError('MISSING_FLAG', `--${name} 需要一個值`); throw new ScriptError(
'MISSING_FLAG',
`--${name} 需要一個值;值本身以 -- 開頭時請改用 --${name}=值 的寫法`,
);
} }
flags[name] = value; flags[name] = value;
} }