处理大型代码库的实践指南
相较于小型项目,处理大型代码库会带来一系列全新的挑战。基于我们扩展 Cursor 自身代码库的经验,以及服务管理海量代码库客户所获得的洞见,我们总结出了一些应对复杂场景的有效模式。
本指南将逐步讲解我们在处理大型代码库时发现的实用技巧。
使用 Chat 功能快速理解陌生代码
在庞大的代码库中导航(尤其是面对新接触的代码时)可能充满挑战。开发者通常需要反复使用 grep
命令、全局搜索和点击跳转来定位目标代码片段。通过 Chat 功能,您可以直接提问来快速定位所需代 码,并获取其工作原理的详细解释。
以下示例展示了如何通过 Chat 功能快速获取 Cursor 代码库索引机制的实现细节,甚至要求生成代码示例来辅助理解。
性能优化提示: 为增强 Cursor 对代码库结构的理解能力,建议在 设置 中启用 包含项目结构(Include Project Structure)选项以提升分析效果。
编写领域特定知识的规则
如果您正在引导新协作者加入代码库,您会提供哪些上下文信息以确保他们能够快速开展有价值的贡献?
这些问题的答案对于 Cursor 理解项目同样具有重要价值。每个组织或项目都蕴含着可能未完整记录在文档中的潜在知识。有效运用规则是确保 Cursor 全面理解项目背景的最佳方式。
例如,当您编写新功能或服务的实现指南时,可以考虑编写简明规则来为后续使用提供文档支持。
---
description: 添加新的 VSCode 前端服务
---
1. **接口定义:**
- 使用 `createDecorator` 定义新服务接口,并确保包含 `_serviceBrand` 以避免错误
2. **服务实现:**
- 在新建的 TypeScript 文件中实现服务,继承 `Disposable`,并通过 `registerSingleton` 注册为单例
3. **服务注入:**
- 创建贡献文件来导入和加载服务,并在主入口文件中完成注册
4. **上下文集成:**
- 更新上下文以包含新服务,确保应用全局可访问
如果您希望确保 Cursor 遵循特定的格式规范,可以考虑基于 glob 模式自动附加规则。
---
globs: *.ts
---
- 使用 bun 作为包管理器。请参阅 [package.json](mdc:backend/reddit-eval-tool/package.json) 以获取脚本
- 文件名使用 kebab-case
- 函数和变量名使用 camelCase
- 硬编码常量使用 UPPERCASE_SNAKE_CASE
- 优先使用 `function foo()` 而不是 `const foo = () =>`
- 使用 `Array<T>` 而不是 `T[]`
- 使用命名导出而非默认导出,例如 (`export const variable ...`, `export function `)
紧随计划创建过程
对于较大的改动,投入超出平均水平的思考来制定一个精确、范围明确计划,可以显著提升 Cursor 的输出效果。
如果你发现几次尝试不同的相同提示词后,仍然得不到你想要的结果,可以考虑缩小范围,从零开始创建一个更详细的计划,就像为同事编写产品需求文档一样。很多时候,困难之处在于确定应该做出什么改变,而这项任务非常适合人类。有了正确的指令,我们可以将实现的部分工作委托给 Cursor。
使用 AI 增强计划创建过程的一种方式是使用 Ask 模式。要创建计划,请在 Cursor 中打开 Ask 模式,并将来自项目管理系统、内部文档或零散想法的任何上下文信息输入进去。
考虑一下你已经在代码库中知道想要包含哪些文件和依赖项。这可以是一个包含你想要集成的代码片段的文件,或者可能是一个整个文件夹。
这里是一个示例提示词:
- 制定一个计划,说明我们应该如何创建一个新功能(就像 @existingfeature.ts 一样)
- 如果有任何不清楚的地方,请问我问题(最多 3 个)
- 确保搜索代码库
@过去的聊天记录(我之前的探索提示)
这里是来自 [项目管理工具] 的更多上下文:
[粘贴的工单描述]
该提示词要求模型通过向人类提问来制定计划并收集上下文,同时参考早期探索性提示和工单描述。推荐使用 claude-3.7-sonnet
、gemini-2.5-pro
或 o3
等思维模型,这些模型能够更好理解变更意图并综合制定计划。
通过这种方式,您可以在开始实施前借助 Cursor 迭代完善计划。
为工作选择合适的工具
在使用 Cursor 时,最重要的技能之一是选择适合任务的工具。思考你想要完成什么,并选择能让你保持专注的方法。
工具 | 使用场景 | 优点 | 局限性 |
---|---|---|---|
Tab | 快速手动变更 | 完全控制,速度快 | 单文件 |
Inline Edit( 行内编辑) | 单个文件内的范围性变更 | 专注编辑 | 单文件 |
Chat | 更大范围、跨文件的变更 | 自动收集上下文,深度编辑 | 速度较慢,依赖上下文 |
每款工具都有其用武之地:
- Tab 是你快速编辑时想要掌控全局的首选
- Inline Edit(行内编辑) 适合你需要专注于代码特定部分进行修改时
- Chat 功能最适合那些需要 Cursor 理解更广泛上下文的大规模变更
当你使用Chat 模式(虽然感觉稍慢但功能极其强大)时,通过提供良好上下文来帮助它帮助你。使用 @files 指向你想模仿的相似代码,或使用 @folder 让它更好地理解你的项目结构。而且不要害怕将重大变更分解成更小的部分——开启新的Chat窗口有助于保持专注和高效。