编码的未来前景看起来非常光明
ChatGPT 引领了编码的新纪元。不再需要指望 Stackoverflow 能解决编码问题。相反,只需向 ChatGPT 提出问题,几秒钟内就能得到答案。这对我和我们在 Eppo 的团队来说,是一个颠覆性的改变,尤其是在我们接触不熟悉的领域时。
Cursor AI 代码编辑器 是一个几乎可以与 ChatGPT 比肩的游戏规则的颠覆者。它就像是知道你代码库的 ChatGPT。有几种方法可以与 Cursor 互动,以增强你的开发效率。
- Copilot++。正如名字所示,Cursor 提供了一个改进版本的 GitHub Copilot,除了标准 Copilot 提供的新代码建议外,它还能提出多行代码编辑建议。
- 代码库聊天(Command + L 与代码库)。这使您能够“与代码库聊天”,并询问问题。Cursor 会智能地将相关文件引入对话,然后 ChatGPT 会做出适当的回应。这对于导航您不熟悉的代码库部分非常有帮助。
- 代码生成的代码库聊天(Command + L 与代码库并正确提示)。与正常的代码库聊天非常相似,您可以在其中询问 Cursor 关于您的代码的问题,您还可以与 Cursor 聊天并提示它为您生成新的代码。这在您的更改需要跨越多个文件的更改时特别强大。
- 新代码生成(Command + K)。提示 Cursor 为您当前文件生成新代码。您可以标记文件或文档以提供 Cursor 执行您的指令所需的所需信息。
- 代码编辑(首先突出显示代码部分,然后使用 Command + K)。您可以突出显示代码的一部分并提示 Cursor 对其进行编辑。同样,您可以标记文件或文档以提供正确的上下文。
- 代码问题(首先突出显示代码部分,然后使用 Command + L)。您可以突出显示代码的一部分并对其进行提问,无论是否有代码上下文。如果您试图理解几行代码或某个函数的具体作用,这非常有帮助。
我将跳过对Copilot++的详细讲解,因为这很难在当下完整呈现。我将在下面展示Cursor的其他四种互动方式的示例。
2. 代码库聊天区代码库聊天是我第一次使用Cursor时的“啊哈”时刻。一位来自客户的数据科学家在我们的工程技术Slack频道里提出了一个疑问,询问我们公共指标同步API中一个未记录部分的操作符是什么。该API允许公司通过传递一个JSON文件来同步数百或数千个指标到我们的系统。在此之前,我从未看过任何指标同步的代码。不过,因为我刚加入Cursor不久,想借此机会测试一下Cursor的能力。哇哦,真的让我印象深刻!具体来说,我问了
对于度量 API 同步过程中,在根据事实属性筛选时,你应该传递哪个运算符给 API 来表示不等于?
客户试过“not in”和“not equals”,但两者都不起作用。Cursor特别回复并显示正确的运算符是“不等于”。
在没有 Cursor 的情况下,找到答案至少需要我花费 5 分钟的时间来查找代码。相比之下,不到 30 秒。
另一个相对直接了当的例子。我想知道我们定义全局提升比率的地方。进行一个简单的查询。
全局提升比率的定义在哪里?
立即回应说,给出了我们计算全局提升值的具体计算函数。
好的,挺好的,所以Cursor可以搞定那些简单直接的问题。它能应对更棘手的问题吗?
在查看Eppo网页应用性能的时候,我在Datadog追踪中发现了以下内容(如下)。
许多数据库查询都在查找连接到同一个数据仓库的信息
我从Datadog那里发现,这发生在加载实验的“诊断”时。虽然我相对容易地找到了加载诊断的地方(我们使用GraphQL),但我无法找出查询仓库数据的来源。所以我决定看看Cursor能不能帮帮我。我从Datadog那里得到了查询,知道我们在加载诊断信息后,我问了Cursor。
这个查询可能在哪种加载诊断的场景中出现?
请在此插入查询内容
它的回复相当令人惊讶。它准确指出了获取仓库信息的代码位置。花了一些时间找到了触发它的解析触发字段,但Cursor基本上解决了我的问题,并为我节省了几个小时的代码查找时间。
我被这个回复惊呆了
3. 代码生成聊天(Cmd + L)这个非常强大。目前Cursor的Command + K功能还不支持生成多个文件的代码,但你可以让Cursor误以为你需要生成多个文件的代码,然后将生成的代码复制粘贴到相应的位置。
这是我很喜欢的一个例子。我正在尝试使用简单的装饰器和守卫来为我们的Nest.js控制器实现公共API的速率限制。我的提示内容如下:
有没有办法用装饰器来实现速率限制?我希望使用路由和API密钥作为速率限制标识。希望能在装饰器里设置速率限制的时间窗口。
看看回来的是什么!是个完美的解决方案!
它展示了 (1) 装饰器,(2) 限流拦截器,以及 (3) 装饰器的使用。太酷了!
我并没有完全复制粘贴这段文字,但非常接近。在讨论Cursor的Command + K新代码生成功能时,下面会进一步举例说明。
4. 生成新代码(Cmd + K)代码生成工具很擅长在特定文件中从零开始生成新代码,特别是在使用@符号添加相关文件或文档来提供所需上下文时。
在继续限流的话题上,我在实际编写核心代码逻辑的过程中,利用了新的代码生成功能。我创建了相应的防护文件来,并进行了相应的提示。
基于API密钥哈希、请求方法和路径,编写一个速率限制器保护程序。使用Redis作为存储。
这就是它的结果!
另外一次我需要生成一个条形图,显示我们实验流程中每一步的总运行时间。我们使用了Recharts,但我并不想阅读文档来生成正确代码。所以我请Cursor帮忙。
请使用@Recharts生成一个条形图,采用堆叠方式。
这里的 @ 很重要。我实际上从 Recharts 的文档中引入了这些内容。它生成的内容如下:
这大概为我节省了一个小时去查找Recharts文档以确保所有属性都正确的过程。而且生成的图表看起来很棒!它甚至为每个类别选择了合理的颜色。
从数学的角度来说,一个稍微复杂的例子是用于计算比率度量全局提升的代码。大概的提示是
写一个计算比率指标整体提升的函数。
回复太棒了,虽然我重新核对了数学,结果还是对的。
又一个例子是生成给定数据输入的HTML表格的指令。大致意思是
请根据提供的数据创建一个HTML表格。
这就是它搞出来的。
其实我不应该用直接的HTML代码,这引出了下一部分的内容。
5. 代码编辑(高亮显示,快捷键 'K')Cursor工具在编辑现有代码方面非常擅长。你只需高亮需要修改的代码,让Cursor处理,然后使用 Command + Y/N 来接受或拒绝更改。
我收到了對上述PR的非常好的反饋,收到建議使用DataTable.tsx組件而非純HTML(我主要是後端開發者,所以當時並不知道這個組件)。所以我標出了100行HTML然後提示:
请使用这个 @DataTable.tsx 组件
这次我导入了特定文件的上下文,即DataTable组件的文件。30秒后,我成功创建了一个可以工作的表格,使用的是DataTable组件而不是纯HTML。简直不敢相信!
这里就是DataTable的显示效果,比如:
6. 代码相关问题(按下 'Command + L')Cursor的另一个很棒的功能是能够在代码库聊天功能中轻松分享代码。你高亮代码,按下Command + L键,就可以轻松询问关于代码的问题。
这里是我第一次使用此功能的一个例子,当时在浏览我们代码库中的配置设置。首先,我高亮了schedulableWindowISOIntervals设置,然后触发了一个提示。
zh: > 这个设置干嘛的?
我甚至还问了一个后续问题。
如果时间段没有覆盖一整天呢?
收到了这两个问题的绝佳回答。
另一个例子。我在调试我们公共API的默认分页为何在没有传递分页参数时不起作用。代码看起来没问题,但我就是无法找出原因。于是我决定试一下Cursor。我高亮了相应的代码并开始操作。
不知道为什么,在某些情况下默认限制没有被应用。怎么会这样呢?
准确地,Cursor 发现问题的所在是我们直接检查了 null,而参数可能是未定义的。BOOM!
一个真的很酷的最终例子。我们有一些有问题的代码,将所有实验加载到内存中进行计数。我想通过SQL来修复它,并通过SQL进行计数,以增强句子的流畅度。所以我高亮了那行代码,并提示代码编辑器Cursor,这样更符合口语表达。
有没有办法通过在查询中计算计数,而不是将所有实验数据放入内存中,来提高效率?
果然,Cursor 想出了我们需要的 TypeORM 查询,解决了问题。
结尾就这样结束了!希望你们喜欢我给你们分享的具体例子,说明Cursor如何彻底改变了我们在这里(在Eppo)搜索、编写和调试代码的方式。Cursor定义了未来一段时间内人工智能和软件工程师之间的互动方式。你也赶快跟上这个潮流吧!