根据用户给出的需求描述或问题与指定代码入口,沿组件引用、方法调用、接口与路由关联向前端子模块或后台分层方法收敛,直至定位实现该需求的关键代码位置,并输出带路径与行号的核心代码片段。当用户说定位逻辑、定位功能、找实现、代码在哪、从入口追到业务、或给出「需求/问题 + 入口文件」并要求缩小到关键代码时使用。与「梳理功...
--- name: wenwei-code-positioning description: 根据用户给出的需求描述或问题与指定代码入口,沿组件引用、方法调用、接口与路由关联向前端子模块或后台分层方法收敛,直至定位实现该需求的关键代码位置,并输出带路径与行号的核心代码片段。当用户说定位逻辑、定位功能、找实现、代码在哪、从入口追到业务、或给出「需求/问题 + 入口文件」并要求缩小到关键代码时使用。与「梳理功能点」不同:本技能以问题驱动、早停于关键实现,不默认输出完整模块知识库文档。 --- # 需求驱动的代码定位 ## 与「梳理功能点」的边界 | 维度 | 本技能(定位逻辑) | 梳理功能点 | |------|-------------------|------------| | 输入 | 需求/问题描述 + **一个**入口 | 入口为主,偏全量结构 | | 目标 | 收敛到**关键实现**即止 | 结构化知识库、递归全景 | | 输出 | 结论 + 少量核心片段 + 短调用链 | 多章节文档模板 | 若用户仅要「从入口完整梳文档」,改用梳理功能点;若用户要给具体问题找落点,用本技能。 ## 触发后先确认的信息 若用户未显式给出,用一句话向用户补齐(或从附件/打开文件合理推断): 1. **需求或问题**:要验证的行为、报错现象、接口名/按钮文案/字段名等可检索线索。 2. **代码入口**:单文件路径(或符号名 + 大致路径),作为追踪起点。 ## 追踪策略(按栈自适应) 1. **从入口读上下文**:import/导出、模板事件、路由名、`$http`/axios/fetch 的 URL、RPC/Action 名、常量与枚举、注释中的业务词。 2. **语义匹配优先**:用需求中的名词、动词、接口 path、表名、状态码、字典值在**当前文件与一跳依赖**内 grep/语义搜索,缩小下一跳,避免无目的全仓库展开。 3. **前端**:入口 → 子组件 / composable / API 模块 / store action → 与 URL 或 mock 路径对应的调用点。 4. **后端**:入口(多为 Controller)→ Service → DAO/Mapper/XML → 关键分支;注意注解路由、Feign、消息监听等多入口。 5. **跨端**:发现前端请求 path 或 operationId 后,在后端按 path、@RequestMapping、网关前缀变体搜索;反向则从 Controller 找前端封装函数名。 6. **早停**:一旦某处代码**直接**实现需求中的分支、校验、持久化或 UI 展示,即视为关键位置;若存在多层薄封装,保留「最接近业务判断」的一层为主锚点,上一层可附一行引用。 7. **工作空间外**:关联代码不在当前 workspace 时,标明 `[⚠️ 不在当前工作空间]` 并给出已知的符号名或接口约定,停止臆造路径。 ## 工具使用 - 优先:`Grep`(精确符号/path)、`SemanticSearch`(语义)、`Read`(局部验证)。 - 避免:无关键词时对整个 `node_modules` 或生成物目录大范围搜索。 ## 输出格式(默认在对话中输出) 按顺序给出,保持简洁: ```markdown ## 定位结论 - **需求摘要**:[一句话] - **关键实现**:[文件路径] — `函数名/类名` 或「模板/配置段」 - **为何是此处**:[1~3 条,对应需求中的哪一点] ## 调用链(简写) `入口文件` → `A` → `B` → **关键** `C` ## 核心代码片段 ``` 代码块必须使用 Cursor 可导航引用格式(单独一行起始): ```startLine:endLine:相对或绝对路径 // 仅保留与需求直接相关的连续行;无关处用 // ... 略 ``` 可附 **次要位置**(校验、枚举、SQL 片段)各一段,每段不超过约 40 行有效代码。 ## 无法收敛时的输出 - 列出已追踪路径与已排除原因。 - 明确缺少的信息(例如未知接口 path、动态路由参数)。 - 给出建议的下一入口或用户可提供的 grep 关键词。 ## 质量自检 - [ ] 片段来自真实文件,行号与内容一致,禁止编造。 - [ ] 至少一个「关键」位置与需求表述可逐条对应。 - [ ] 调用链无环、无跳步神话(未读文件不写进链)。
don't have the plugin yet? install it then click "run inline in claude" again.