feat(output): 全局 --query/-q 点分路径输出字段提取(零依赖,对标 gh --jq) #342

Merged
wbtiger merged 3 commits from Taoyouce/gitlink-cli:feat/output-query into master 2026-07-14 22:24:58 +08:00
Contributor

动机

对标 gh --jq:Agent 与 shell 脚本消费 CLI 输出时经常只需单个字段(最新 commit sha、issue 总数等),此前必须依赖外部 jq 或自行解析完整 JSON 信封。本 PR 新增零依赖的点分路径提取,纯 Go 标准库实现,不引入任何第三方 JSON 查询库(避免供应链风险)。

行为

  • 新增全局持久 flag --query / -q,对所有命令生效
  • 路径语法:点分段;段为对象键,或非负整数作为数组下标。例:-q data.commits.0.sha-q data.total_issues_count
  • 标量输出裸值方便 shell 管道;对象/数组输出缩进 JSON
  • 错误信息可操作:键不存在时列出该层全部可用键(排序);下标越界/非数字段给出数组长度提示

生产实测

  • issue +list --limit 2 -q data.issues.0.subject → 裸标题字符串
  • issue +list -q data.total_issues_count → 4197
  • 误键 -q data.issues.0.name → 报错并列出全部可用键(含 subject)

测试

internal/output/query_test.go 6 个单测;全量 go test/vet/gofmt 通过。i18n 中英文案齐备。

## 动机 对标 `gh --jq`:Agent 与 shell 脚本消费 CLI 输出时经常只需单个字段(最新 commit sha、issue 总数等),此前必须依赖外部 jq 或自行解析完整 JSON 信封。本 PR 新增零依赖的点分路径提取,纯 Go 标准库实现,不引入任何第三方 JSON 查询库(避免供应链风险)。 ## 行为 - 新增全局持久 flag `--query` / `-q`,对所有命令生效 - 路径语法:点分段;段为对象键,或非负整数作为数组下标。例:`-q data.commits.0.sha`、`-q data.total_issues_count` - 标量输出裸值方便 shell 管道;对象/数组输出缩进 JSON - 错误信息可操作:键不存在时列出该层全部可用键(排序);下标越界/非数字段给出数组长度提示 ## 生产实测 - `issue +list --limit 2 -q data.issues.0.subject` → 裸标题字符串 - `issue +list -q data.total_issues_count` → 4197 - 误键 `-q data.issues.0.name` → 报错并列出全部可用键(含 subject) ## 测试 internal/output/query_test.go 6 个单测;全量 go test/vet/gofmt 通过。i18n 中英文案齐备。
Taoyouce added 4 commits 2026-07-06 07:22:13 +08:00
Taoyouce added 1 commit 2026-07-06 07:25:23 +08:00
4913cf5319 fix(output): 全局提取 flag 改名 --jq,避免与 api 子命令 --query(查询参数)语义冲突
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Taoyouce added 1 commit 2026-07-06 07:26:31 +08:00
16c0528427 docs: 全局参数表补 --lang 与 --jq(中英)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
wbtiger merged commit afc3b5773a into master 2026-07-14 22:24:54 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Gitlink/gitlink-cli#342
No description provided.