You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
2.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#项目规范
## 技术栈
- 前端:Tauri + Vue 3 + TypeScript
- 后端:Java + Spring Boot
- 数据库:MS SQL Server 或 OceanBase
## 代码规范
- 函数名用 camelcase组件名用 Pascalcase
- 常量UPPER_SNAKE_CASE
- 文件名:一般 kebab-case 或与默认导出组件同名 PascalCase
- 布尔值变量以 is / has / should 开头,如 isLoading
- 所有函数必须有 JSDoc 注释
- 错误处理必须用 try/catch不能用.catch()
- 行尾无空白,文件末尾保留一个空行
- 一行代码不超过 100 / 120 个字符(常见 100超长时合理换行
- 不加分号
- 普通字符串用 单引号 'hello',需要插值时用反引号模板字符串
- JSX 属性用双引号
- 严格的导入顺序第三方库React、axios 等)> 内部路径别名模块(如 @/components> 相对路径模块(./utils> 样式文件
- 禁止通配符导入import \* as … 只在极少数必要情况)
- 分组之间保留空行,同类按字母排序
- 任何有意义的数字和字符串必须提取为 命名常量
- 始终使用 === 和 !==,避免隐式类型转换带来问题
- 单一职责:一个函数只做一件事
- 长度:单个函数不超过 50 行(逻辑复杂时拆小)
- 参数数量:不超过 3 个,超出时用对象参数
- 提前返回Return Early避免深层 if 嵌套,提高可读性
- 纯函数优先:不修改入参,避免副作用
- 所有 async/await 必须 try/catch 或附加 .catch()
- 严禁空 catch 块,至少要记录日志或显式忽略并注释原因
- Promise 的拒绝必须处理unhandled rejection 零容忍)
- 所有 导出的函数、类、类型、接口、组件 必须写 JSDoc / TSDoc 注释,描述用途、参数、返回值
- 复杂逻辑用行注释解释“为什么”,而非“做什么”
- 使用 // TODO: 和 // FIXME: 标记,并要求 AI 不在生产代码留大段注释掉的旧代码
- 不保留未使用的变量、导入、函数(可由 ESLint 直接检测)
- 不留下 console.log 调试语句(除非严格限定的日志工具)
- 一个文件一个主要导出(默认导出或单一组件),相关工具/类型可并存
- 文件总行数建议不超过 300 行(组件可适当放宽,但组件太长也要拆分)
## 禁止行为
- 禁用 var全部使用 const / let,优先 const只有确实需要重新赋值才用 let
- 不使用 any 类型
- 不写裸 console.log用统一的 logger
- css不用内联样式
- 禁止混用 Tab使用 2 个空格(或 4 个,项目统一即可)
## 提交规范
feat:新功能 |fix:修复| refactor:重构