用了Cursor,却总写出烂代码?试试写个Rules!

大模型关系型数据库NoSQL数据库

大家好,我是子昕,一个干了10年的后端开发程序员,现在在AI编程这条路上边冲边摸索,搞点新花样。

用Cursor一段时间了,这玩意儿时不时就犯病。

明明我用的是Mybatis-plus,它非要用Spring Data JPA给我生成代码;
我明明用的yaml配置文件,它倔强地给我整properties;
我想用java8那种优雅的stream流操作,它铁了心只会for循环;
我想用Optional避免空指针,它就是倔强地要if判断==null

说实话,我早就知道Cursor Rules应该能解决这些问题,但一直懒癌发作,一拖再拖,每次都是Cursor生成完我再手动改一遍。

今天终于研究了下,发现这东西简单得我想抽自己大嘴巴子!这么好用的东西我居然拖了这么久???

不管你写啥语言,如果你也被Cursor的随性发挥给整自闭了,赶紧跟着我学起来!不会真有人到现在还没用Rules吧?

Cursor Rules是个啥玩意儿?//

简单来说,Cursor Rules就是用来"调教"大模型的规则文件。

我们平时用AI的时候,大模型上下文总是记不住,经常过一会儿就变傻了。

但有了这个Rules文件,就能提供持久且可复用的上下文,它会被插到模型上下文的开头,让AI生成代码时不再那么神经质。

这么一说,你是不是已经明白它为啥能解决上面那堆问题了?是不是有点小激动?

Cursor Rules现在有俩种类型:

  1. User Rules:全局规则,所有项目均能用
  2. Project Rules:项目级别规则,就当前项目生效

怎么配置这玩意儿?//

打开Cursor的Settings(这个总会吧?不会的话建议回炉重造),点击Rules,就能看到这两种Rules了。

picture.image

全局规则超简单,User Rules下面输入框里敲就完事了。默认就一句"始终使用中文回复"(贴心~)。

项目级别规则呢,点右边那个添加按钮,弹出个框,输个Rules文件名。picture.image

然后它自动打开文件,开始整活:picture.image

Rules有四种类型,名字就挺明显的:picture.image

  1. Always:总是生效
  2. Auto Attached:需要你配置一下啥情况下生效,比如指定后缀的文件才用picture.image
  3. Agent Request:得给规则加个描述,让Cursor自己判断要不要用

picture.image

  1. Manual:得你自己在聊天框手动指定,有点麻烦但最灵活picture.image

picture.image

对了!Cursor 0.49之后的版本,新增了个超神功能 - AI帮你生成规则!简直懒人福音啊!

只要在Agent输入/Generate Cursor Rules,就能自动生成mdc文件:

picture.image

然后AI就自动扫描你的代码库,直接帮你搞定Rules文件,太香了这个操作!

picture.image

它直接在项目的.cursor/rules目录下生成了相关Rules!

picture.image

最离谱的是,我刚新建了个java.mdc文件,还没开始写呢,这货直接帮我把规则写好了,贴心得我都不好意思了!

picture.image

Rules咋写啊?抄不抄作业?//

这么麻烦的Rules文件,难道要自己一个字一个字敲?那得累成啥样啊! 推荐两个宝藏网站给你们:

https://cursor.directory/rules https://github.com/PatrickJS/awesome-cursorrules

我常用第一个,这网站收集了超多优质Rules,不同语言技术栈都有:

picture.image

比如,Java技术栈的Rules(我贴心地给你们翻译了一下)

  
您是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 和相关 Java 技术的专家。  
  
代码风格和结构  
- 使用准确的 Spring Boot 示例编写干净、高效且有据可查的 Java 代码。  
- 在整个代码中使用 Spring Boot 最佳实践和约定。  
- 在创建 Web 服务时实现 RESTful API 设计模式。  
- 使用遵循 camelCase 约定的描述性方法和变量名称。  
- 构建 Spring Boot 应用程序:控制器、服务、存储库、模型、配置。  
  
Spring Boot 细节  
- 使用 Spring Boot 启动器快速设置项目并进行依赖管理。  
- 实现注释的正确使用(例如,@SpringBootApplication,@RestController,@Service)。  
- 有效利用 Spring Boot 的自动配置功能。  
- 使用@ControllerAdvice 和@ExceptionHandler 实现适当的异常处理。  
  
命名约定  
- 使用 PascalCase 作为类名(例如,UserController、OrderService)。  
- 使用驼峰式命名方法和变量名(例如,findUserById、isOrderValid)。  
- 对常量使用 ALL\_CAPS(例如,MAX\_RETRY\_ATTEMPTS、DEFAULT\_PAGE\_SIZE)。  
  
Java 和 Spring Boot 的使用  
- 在适用时使用 Java 17 或更高版本的功能(例如,记录、密封类、模式匹配)。  
- 利用 Spring Boot 3.x 功能和最佳实践。  
- 在适用时使用 Spring Data JPA 进行数据库操作。  
- 使用 Bean Validation(例如 @Valid、自定义验证器)实现适当的验证。  
  
配置和属性  
- 使用 application.properties 或 application.yml 进行配置。  
- 使用 Spring Profiles 实现特定于环境的配置。  
- 使用@ConfigurationProperties 作为类型安全的配置属性。  
  
依赖注入和 IoC  
- 使用构造函数注入而不是字段注入以获得更好的可测试性。  
- 利用 Spring 的 IoC 容器来管理 bean 的生命周期。  
  
测试  
- 使用 JUnit 5 和 Spring Boot Test 编写单元测试。  
- 使用 MockMvc 测试 Web 层。  
- 使用@SpringBootTest 实现集成测试。  
- 使用@DataJpaTest 进行存储库层测试。  
  
性能和可扩展性  
- 使用 Spring Cache 抽象实现缓存策略。  
- 使用@Async 进行异步处理以实现非阻塞操作。  
- 实施适当的数据库索引和查询优化。  
  
安全  
- 实施 Spring Security 进行身份验证和授权。  
- 使用正确的密码编码(例如,BCrypt)。  
- 必要时实现 CORS 配置。  
  
日志记录和监控  
- 使用 SLF4J 和 Logback 进行日志记录。  
- 实施适当的日志级别(ERROR、WARN、INFO、DEBUG)。  
- 使用 Spring Boot Actuator 进行应用程序监控和指标。  
  
API 文档  
- 使用 Springdoc OpenAPI(以前称为 Swagger)获取 API 文档。  
  
数据访问和 ORM  
- 使用 Spring Data JPA 进行数据库操作。  
- 实施适当的实体关系和级联。  
- 使用 Flyway 或 Liquibase 等工具进行数据库迁移。  
  
构建和部署  
- 使用 Maven 进行依赖管理和构建过程。  
- 为不同的环境(开发、测试、生产)实施适当的配置文件。  
- 如果适用,使用 Docker 进行容器化。  
  
遵循以下最佳实践:  
- RESTful API 设计(正确使用 HTTP 方法、状态代码等)。  
- 微服务架构(如果适用)。  
- 使用 Spring 的 @Async 进行异步处理或使用 Spring WebFlux 进行反应式编程。  
  
在 Spring Boot 应用程序设计中遵循 SOLID 原则并保持高内聚和低耦合。  

这个 Rules 主要包含三方面内容:

  1. 角色定位(专家身份、核心职责)
  2. 工作要求(任务要求、架构要求、工程标准)
  3. 技术规范(技术选型、工具链、代码规范)

参考别人的内容,自己微调一下就能用,干嘛非得自己写?那不是自讨苦吃嘛!我这种懒人最爱复制粘贴了。

我在Cursor帮我生成的规则基础上加了点自己的要求:

  
## 强制使用Stream API  
所有集合操作必须优先使用Java 8 Stream API,禁止使用传统for循环(特殊性能优化场景除外)  
  
## 强制使用Optional  
所有可能返回null的方法必须用Optional包装返回值  
  
## 禁止显式null检查  
使用Objects.nonNull/isNull替代== null判断  
  
## 链式空值防御  
使用Optional链式操作避免深层嵌套  
  
## 函数式编程原则  
优先使用方法引用和Lambda表达式  
  
## 不可变集合策略  
返回集合时使用不可变视图  

测试了一下,这货居然真的乖乖按我说的来了,不再乱来了!

picture.image

说真的,这种感觉,就像是你终于调教好了一只不听话的二哈,简直爽到飞起!

大家赶紧去试试吧!不要像我一样拖延症晚期啊!


点击关注

「点赞、转发、在看」
和大家一起看

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论