DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Deno 按 Tab 报 invalid argument,修正 zsh 短选项规格缺失的横线

Deno 生成的 zsh 短选项规格曾漏掉横线,普通单行描述也会报 invalid argument。2.9.7 包含处理,更新后须重新生成脚本并测试实际补全。

在 zsh 中输入 deno 后按 Tab,补全报下面的错误,可以检查生成的短选项规格是否漏了横线:

_arguments:comparguments:327: invalid argument: (-h --help)h[]

Deno 2.9.6 有这个明确案例。普通单行描述甚至空描述也能触发,问题不需要帮助文本含换行才能出现。

zsh 的 _arguments 接收的是选项规格,不是简单的名称列表。旧生成器的短、长选项 brace 形式类似:

'(-h --help)'{h,--help}'[]'

括号里列出了 -h,但真正展开的短选项却是 h。一条非法规格就会使本次补全失败,所以看起来像所有子命令和文件补全都失效。手动在终端把命令改成长选项,不会修复已经加载的补全函数。

Deno 2.9.7 的生成器包含短选项横线保护,使对应形式保留 -h。更新可执行文件后,应重新生成并加载补全脚本,而不是只检查 deno --version:

deno completions zsh > ./deno-completion.zsh
zsh -n ./deno-completion.zsh

先审阅这个独立文件,再在测试 zsh 会话中加载它。保留原来的 completion 初始化方式;更新长期自动加载目录时,应确认函数名和目录设置与原安装匹配,避免新旧两个同名补全同时存在。

source ./deno-completion.zsh

zsh -n 只检查脚本语法,不能证明 _arguments 的每条选项规格合法。实际验收仍需按 Tab:分别测试裸 deno、一个短选项前缀、长选项前缀,以及项目依赖的子命令和文件参数。确认不再出现上述 h[] 错误,结果与选项定义一致。

若新生成文件已正确但旧错误仍在,查看当前会话是否继续使用旧函数,必要时用新会话对照。不要对 shell 全局关闭错误输出,否则补全只是静默失败。

这条路径只讨论短选项名称缺少横线。帮助文本换行、描述中的特殊字符或其他 shell 的字段协议,会产生不同的规格或消费问题;没有这些内容的最小例子仍失败,才是这里最有用的判断边界。