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