internal/cli:命令保留旗標機制,修正 login add 旗標被全域剖析搶走(#18) #20

Merged
alex merged 3 commits from fix/issue18-reserved-flags into main 2026-09-10 10:37:21 +08:00
Member

修正 #18:927855d 起的 extractGlobals 會把命令之後的 --token/--url 一律抽走當全域選項,login add 的命令旗標收不到值,3 個測試失敗。

修法

新增 commandReservedFlags 登記表:與全域選項同名的命令自有旗標(目前僅 login 的 --url/--token)在 dispatch 抽取全域選項時原樣保留給命令,命令旗標優先。旗標值在下一引數時一併保留,inline(--token=tok)形式亦同。

驗證

  • go build ./... / go vet ./... 全綠
  • go test ./... 全綠(issue 列出的 TestLoginAddVerifiesThenWrites、TestLoginAddRejected401NoWrite、TestLoginAddUpdatesExistingInPlace 轉綠)
  • issue 重現指令 printf '' | go run ./cmd/teai login add --url https://example.invalid --token foo 改為連線錯誤(exit 3,API 錯誤),不再是 token must not be empty(exit 2)
  • #13 原案例不回歸:新增 TestExtractGlobalsNonReservedCommand 驗證未登記命令(members --has-work)命令後全域選項照常抽取;既有 TestExtractGlobalsAllowsCommandFlags 仍綠

關聯 issue:#18

修正 #18:927855d 起的 extractGlobals 會把命令之後的 --token/--url 一律抽走當全域選項,login add 的命令旗標收不到值,3 個測試失敗。 ## 修法 新增 commandReservedFlags 登記表:與全域選項同名的命令自有旗標(目前僅 login 的 --url/--token)在 dispatch 抽取全域選項時原樣保留給命令,命令旗標優先。旗標值在下一引數時一併保留,inline(--token=tok)形式亦同。 ## 驗證 - go build ./... / go vet ./... 全綠 - go test ./... 全綠(issue 列出的 TestLoginAddVerifiesThenWrites、TestLoginAddRejected401NoWrite、TestLoginAddUpdatesExistingInPlace 轉綠) - issue 重現指令 printf '' | go run ./cmd/teai login add --url https://example.invalid --token foo 改為連線錯誤(exit 3,API 錯誤),不再是 token must not be empty(exit 2) - #13 原案例不回歸:新增 TestExtractGlobalsNonReservedCommand 驗證未登記命令(members --has-work)命令後全域選項照常抽取;既有 TestExtractGlobalsAllowsCommandFlags 仍綠 關聯 issue:#18
max added 1 commit 2026-09-10 10:22:52 +08:00
max requested review from alex 2026-09-10 10:22:59 +08:00
Member

驗證結果:修法方向正確(commandReservedFlags 登記表、命令旗標優先),PR 分支本身 go build/vet/test 全綠,issue #18 所列 3 個測試轉綠、重現指令改為 exit 3,#13 原案例(members --has-work)不回歸,本機實測亦同。

但有一個問題需先修正:本 PR 與最新 main(4a34def,#13 已合併)語意衝突(文字合併無衝突,但合併後編譯失敗)。PR 把 extractGlobals 簽名從 2 參數改為 3 參數(新增 reserved),而 main 上 #13 新增的 4 個測試仍以舊簽名呼叫:

  • TestExtractGlobals(exitcode_test.go:75)
  • TestExtractGlobalsAfterCommand(:103)
  • TestExtractGlobalsKeepsCommandFlags(:127,迴圈用 extractGlobals(&g, args))
  • TestExtractGlobalsDoubleDashStops(:148)

合併 main 後 go vet 報 not enough arguments in call to extractGlobals。我已在本機合併驗證:這些呼叫補上第三參數 nil(皆非 login 命令,無保留旗標)後 build/vet/test 全綠,修法可行。

請在分支合併最新 main 並更新上述 4 個測試呼叫(補第三參數 nil 或 reservedFlags(...))後 push,我再複審。暫不合併。

驗證結果:修法方向正確(commandReservedFlags 登記表、命令旗標優先),PR 分支本身 go build/vet/test 全綠,issue #18 所列 3 個測試轉綠、重現指令改為 exit 3,#13 原案例(members --has-work)不回歸,本機實測亦同。 但有一個問題需先修正:本 PR 與最新 main(4a34def,#13 已合併)**語意衝突**(文字合併無衝突,但合併後編譯失敗)。PR 把 extractGlobals 簽名從 2 參數改為 3 參數(新增 reserved),而 main 上 #13 新增的 4 個測試仍以舊簽名呼叫: - TestExtractGlobals(exitcode_test.go:75) - TestExtractGlobalsAfterCommand(:103) - TestExtractGlobalsKeepsCommandFlags(:127,迴圈用 extractGlobals(&g, args)) - TestExtractGlobalsDoubleDashStops(:148) 合併 main 後 go vet 報 not enough arguments in call to extractGlobals。我已在本機合併驗證:這些呼叫補上第三參數 nil(皆非 login 命令,無保留旗標)後 build/vet/test 全綠,修法可行。 請在分支合併最新 main 並更新上述 4 個測試呼叫(補第三參數 nil 或 reservedFlags(...))後 push,我再複審。暫不合併。
max added 2 commits 2026-09-10 10:32:55 +08:00
Author
Member

已依評論更新:分支合併最新 main(4a34def,含 #13 測試)並把 exitcode_test.go 四處舊簽名呼叫(TestExtractGlobals:75、TestExtractGlobalsAfterCommand:103、TestExtractGlobalsKeepsCommandFlags:127、TestExtractGlobalsDoubleDashStops:148)補上第三參數 nil,commit 0ed6f26。合併後 go build/vet/test 全綠;issue #18 重現指令仍為連線錯誤(exit 3),不再是 token must not be empty。請再複審。

已依評論更新:分支合併最新 main(4a34def,含 #13 測試)並把 exitcode_test.go 四處舊簽名呼叫(TestExtractGlobals:75、TestExtractGlobalsAfterCommand:103、TestExtractGlobalsKeepsCommandFlags:127、TestExtractGlobalsDoubleDashStops:148)補上第三參數 nil,commit 0ed6f26。合併後 go build/vet/test 全綠;issue #18 重現指令仍為連線錯誤(exit 3),不再是 token must not be empty。請再複審。
alex approved these changes 2026-09-10 10:37:20 +08:00
alex merged commit 0b0c3cefcb into main 2026-09-10 10:37:21 +08:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/teai#20