Files
zt-closet-backend/.codebuddy/plans/局部变量resp-req重命名为全称_419b3866.md
T
2026-09-11 01:41:52 +08:00

6.7 KiB
Raw Blame History

name, overview, todos
name overview todos
局部变量resp-req重命名为全称 将项目中作为局部变量/函数参数的缩写 resp、req 统一重命名为 response、request,不改动 Dao 字段与 Go 惯用短名,不触碰 c.Request/http.Request 等标准库字段,保证编译与 vet 通过、对外行为不变。
id content status
scan-occurrences 使用 [subagent:code-explorer] 全仓普查 \bresp\b、\breq\b 命中点,输出文件与行号清单,并标注需排除的 RequestID/c.Request/ResponseFormat 等完整标识符 completed
id content status dependencies
rename-handlers 重命名 internal/routers/api/v1 全部 handler 中的局部 resp→response、req→request,借助 [skill:lsp-code-analysis] 做作用域内安全 rename 并同步引用 completed
scan-occurrences
id content status dependencies
rename-service 重命名 internal/service 各文件的参数名 req→request 与局部 resp→response,保持函数体引用一致,借助 [skill:lsp-code-analysis] 校验引用 completed
scan-occurrences
id content status dependencies
rename-middleware-pkg 重命名 internal/middleware/lzcwyjwt.go 及 pkg(wechat 等)中命中的局部 resp/req,排除类型名与导出符号 completed
scan-occurrences
id content status dependencies
verify-build 执行 gofmt、go build ./...、go vet ./... 并 grep 复核无残留独立 resp/req 变量、排除项未被改动 completed
rename-handlers
rename-service
rename-middleware-pkg

需求概述

将项目中作为局部变量与函数参数的缩写标识符 resp、req 统一重命名为全称 response、request,提升代码可读性与命名一致性。这是纯内部命名重构,不改变任何对外行为。

明确边界(已与用户确认)

  • 要改:resp → response、req → request(仅限局部变量/函数参数标识符)
  • 保留不改:
  • service 中的 xxxDao 字段(Dao 为领域专有缩写)
  • Go 惯用短名:ctx、err、ok、db、id、tx、循环变量 i 等
  • 所有类型名/导出符号:dto.XxxRequest、dto.XxxResponse、app.Response、app.NewResponse、ToResponse、ToErrorResponse、ResponseFormat、chatResponse、FortuneResponse 等
  • 标准库/框架字段:c.Request、http.Request、c.Request.Context()
  • 含 req/resp 的完整标识符:RequestID、GetRequestID、requestIDKey、ShouldBindQuery、responseFormat 等

验收标准

  • 项目内不再有名为 resp/req 的独立局部变量/参数标识符
  • 上述排除项完全未被改动
  • go build ./...、go vet ./... 通过,对外 HTTP 行为、DTO JSON tag、路由完全不变

技术方案

重构策略

采用逐文件、按 Go 标识符词边界精确替换的方式(\bresp\b → response、\breq\b → request),仅作用于变量声明、赋值与引用位置。优先使用 LSP 作用域内重命名(rename symbol)保证不跨作用域误伤;对形态高度统一的 handler 文件可按文件精确替换后逐一校验。

命中范围(已通过 search_content 统计确认)

handler 层(internal/routers/api/v1/*.go,形态统一):

  • resp := app.NewResponse(c) → response := app.NewResponse(c),后续 resp.ToResponse(...) / resp.ToErrorResponse(...) 同步更新
  • var req dto.XxxRequest、req.XxxUUID = c.Param(...)、&req → 全部改为 request

service 层(internal/service/*.go):

  • 方法参数名 req *dto.XxxRequest → request *dto.XxxRequest,函数体内引用同步更新
  • 局部 resp(如 horoscope.go、user.go 组装响应处)→ response

middleware / pkg:

  • internal/middleware/lzcwyjwt.go 的 resp := app.NewResponse(c)
  • pkg/wechat/*、pkg/errcode、pkg/app 等如有名为 req/resp 的局部变量/参数,一并处理(以实际命中为准)

关键防回归点

  • \breq\b(小写+词边界)天然不匹配 c.Request(大写 R)、RequestID、requestIDKey、ShouldBindQuery,但替换时须逐处确认无误伤
  • \bresp\b 不匹配 ResponseFormat、responseFormat、chatResponse、FortuneResponse、RecommendLLMResponse,保持不动
  • 类型名 dto.*Request/dto.*Response、app.Response/app.NewResponse/ToResponse 等导出符号绝不改动
  • 替换后须确认无与既有 response/request 标识符的命名冲突(当前代码未发现同名局部变量)

涉及文件清单(预估,以实际命中为准)

internal/routers/api/v1/
├── user.go          # [MODIFY] resp/req → response/request
├── quota.go         # [MODIFY] 同上
├── horoscope.go     # [MODIFY] 同上
├── clothes.go       # [MODIFY] 同上(含 multipart 分支)
├── outfit.go        # [MODIFY] 同上(命中较多)
├── closet.go        # [MODIFY] 同上
├── collect.go       # [MODIFY] 同上
├── like.go          # [MODIFY] 同上
├── notification.go  # [MODIFY] 同上
├── goods.go         # [MODIFY] 同上
├── order.go         # [MODIFY] 同上(含回调 handler)
└── airecommend.go   # [MODIFY] 同上
internal/service/
├── user.go / quota.go / horoscope.go / clothes.go / outfit.go
├── closet.go / collect.go / like.go / notification.go
├── goods.go / order.go / airecommend.go  # [MODIFY] 参数名 req→request、局部 resp→response
internal/middleware/
└── lzcwyjwt.go      # [MODIFY] resp → response
pkg/
├── wechat/mini.go, wechat/pay.go  # [MODIFY] 按实际命中的局部 req/resp
└── errcode/*, app/*               # [CHECK] 按实际命中处理,类型/方法名不动

验证方式

  • gofmt -l 无格式问题
  • go build ./...、go vet ./... 通过
  • grep 复核:无残留作为独立标识符的 \bresp\b/\breq\b 局部变量;c.Request、RequestID、dto.*Request、dto.*Response、ResponseFormat 等未被改动

Agent Extensions

SubAgent

  • code-explorer
  • Purpose:在重构前对全仓库 \bresp\b、\breq\b 做精确命中普查,产出「文件 → 行号 → 上下文」清单,并甄别需排除的完整标识符(RequestID、c.Request、ResponseFormat 等),确保不漏改、不误伤。
  • Expected outcome:得到完整、去噪后的待改点清单,作为逐文件重命名的依据。

Skill

  • lsp-code-analysis
  • Purpose:对 req/resp 局部变量与函数参数执行 LSP 作用域内 rename(含引用点同步更新)与改前引用预览,避免跨作用域误改。
  • Expected outcome:每个 resp/req 标识符在其作用域内被安全重命名为 response/request,所有引用一致更新。