\n\n\n```\n\n### 2.2 TypeScript 使用规范\n```typescript\n// 使用 type 而不是 interface\ntype FileWatcherOptions = {\n path: string\n recursive?: boolean\n ignore?: string[]\n}\n\n// 常量定义\nconst FILE_EVENTS = {\n CREATED: 'created',\n MODIFIED: 'modified',\n DELETED: 'deleted',\n} as const\n\n// 组合式函数\nexport const useFileWatcher = (options: FileWatcherOptions) => {\n const isWatching = ref(false)\n const error = ref(null)\n\n // 返回组合式函数的响应式状态\n return {\n isWatching,\n error\n }\n}\n```\n\n## 3. 功能实现规范\n\n### 3.1 错误处理\n```typescript\n// 使用自定义错误类型\ntype ErrorType = {\n code: string\n message: string\n details?: unknown\n}\n\n// 错误处理函数\nconst handleError = (error: ErrorType) => {\n console.error(`[${error.code}] ${error.message}`, error.details)\n}\n```\n\n### 3.2 状态管理\n```typescript\n// 使用组合式函数管理状态\nexport const useFileStore = () => {\n const files = ref([])\n const isLoading = ref(false)\n\n const addFile = (file: FileInfo) => {\n files.value.push(file)\n }\n\n return {\n files,\n isLoading,\n addFile\n }\n}\n```\n\n## 4. 测试规范\n\n### 4.1 单元测试\n```typescript\nimport { describe, it, expect } from 'vitest'\nimport { useFileWatcher } from './useFileWatcher'\n\ndescribe('useFileWatcher', () => {\n it('should watch files', async () => {\n const { isWatching } = useFileWatcher({\n path: './test'\n })\n\n expect(isWatching.value).toBe(true)\n })\n})\n```\n\n## 5. Git 提交规范\n\n### 5.1 提交消息格式\n```\n: \n\n[optional body]\n```\n\n类型:\n- feat: 新功能\n- fix: 修复\n- docs: 文档更新\n- style: 代码格式\n- refactor: 重构\n- test: 测试\n- chore: 构建/工具\n\n### 5.2 分支管理\n- main: 主分支\n- dev: 开发分支\n- feature/*: 功能分支\n- fix/*: 修复分支\n\n## 6. 性能优化规范\n\n### 6.1 代码优化\n- 使用 `shallowRef` 代替 `ref` 处理大型对象\n- 使用 `v-memo` 缓存不经常变化的列表项\n- 实现虚拟滚动处理大量数据\n\n### 6.2 构建优化\n- 使用动态导入拆分代码\n- 优化依赖包大小\n- 启用构建缓存\n\n## 7. 文档规范\n\n### 7.1 注释规范\n```typescript\n/**\n * 计算文件哈希值\n * \n * @description\n * 使用 MD5 算法计算文件的哈希值,用于文件完整性校验\n * 对于大文件,使用流式处理避免内存占用过大\n * \n * @param filePath - 文件路径\n * @returns Promise - 返回文件的 MD5 哈希值\n * \n * @throws {FileNotFoundError} 当文件不存在时抛出\n * @throws {PermissionError} 当没有文件读取权限时抛出\n * \n * @example\n * ```typescript\n * const hash = await calculateFileHash('example.txt')\n * console.log(`文件哈希值: ${hash}`)\n * ```\n */\nasync function calculateFileHash(filePath: string): Promise {\n // 实现代码...\n}\n```\n\n### 7.2 学习资源\n- 每个核心功能模块添加学习指南\n- 包含相关的技术文档链接\n- 提供进阶学习建议\n\n### 7.3 开发日志\n- 记录重要决策和原因\n- 记录遇到的问题和解决方案\n- 作为学习参考和经验积累\n\n## 8. 代码审查清单\n\n### 8.1 提交前检查\n- [ ] 代码是否符合设计文档\n- [ ] 测试是否全部通过\n- [ ] 注释是否完整清晰\n- [ ] 是否偏离主线任务\n- [ ] 是否考虑了异常情况\n- [ ] 是否有不必要的改动\n- [ ] 相关文档是否更新\n\n### 8.2 代码质量检查\n- [ ] 代码是否简洁清晰\n- [ ] 变量命名是否合适\n- [ ] 是否有重复代码\n- [ ] 是否有性能问题\n- [ ] 是否有安全隐患\n- [ ] 是否便于维护和扩展","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.notsobrightideas.com/"},{"@type":"ListItem","position":2,"name":"Cursor Rules","item":"https://www.notsobrightideas.com//cursorrules"},{"@type":"ListItem","position":3,"name":"Rule for SK4","item":"https://www.notsobrightideas.com//cursorrules/UGVpRmVuZzg3Ny9TSzQvLmN1cnNvcnJ1bGVz"}]},"about":[{"@type":"SoftwareSourceCode","name":"SK4","codeRepository":"https://github.com/PeiFeng877/SK4/blob/bc4cb7906df22b306bb7c70fdee00089c9554a35/.cursorrules","programmingLanguage":"TypeScript"},{"@type":"SoftwareSourceCode","name":"SK4","codeRepository":"https://github.com/PeiFeng877/SK4/blob/bc4cb7906df22b306bb7c70fdee00089c9554a35/.cursorrules","programmingLanguage":"TypeScript"}]}

PeiFeng877 SK4 .cursorrules file for TypeScript

# SK3 项目开发规范

## 0. 核心开发原则

### 0.1 设计优先
- 任何功能实现前必须先完成设计文档
- 设计文档需要包含:
  - 功能描述
  - 技术方案
  - 接口设计
  - 数据流图
  - 可能的风险点

### 0.2 测试驱动开发(TDD)
- 先写测试,再写实现
- 测试用例要考虑:
  - 正常流程
  - 异常情况
  - 边界条件
- 确保测试覆盖率达标

### 0.3 主线任务导向
- 时刻对照开发计划书
- 每次开发前明确当前阶段目标
- 避免功能蔓延(Feature Creep)
- 如需调整计划,先讨论后执行

### 0.4 学习项目特性
- 代码注释要详尽,确保可读性
- 关键算法需要添加原理说明
- 复杂逻辑需要添加流程图
- 保持代码的教学性质

### 0.5 谨慎修改原则
- 修改前:
  - 理解现有代码的作用
  - 评估修改的影响范围
  - 确保修改的必要性
- 修改时:
  - 做好备份
  - 小步修改,频繁测试
  - 保持代码可回滚
- 修改后:
  - 完整测试
  - 更新相关文档
  - 记录修改原因

## 1. 项目结构规范

### 1.1 目录结构
```
src/
  ├── main/              # 主进程代码
  │   ├── services/      # 主进程服务
  │   └── index.ts       # 主进程入口
  ├── renderer/          # 渲染进程代码
  │   ├── components/    # Vue组件
  │   ├── composables/   # 组合式函数
  │   ├── styles/        # 样式文件
  │   └── main.ts        # 渲染进程入口
  └── shared/            # 共享代码
      ├── types/         # 类型定义
      ├── utils/         # 工具函数
      └── constants/     # 常量定义
```

### 1.2 命名规范
- 目录名:小写中划线(如:`file-watcher/`)
- 组件文件:大驼峰(如:`FileList.vue`)
- 组合式函数:驼峰,以use开头(如:`useFileWatcher.ts`)
- 工具函数:驼峰(如:`createWindow.ts`)
- 类型定义:大驼峰(如:`FileWatcherOptions.ts`)

## 2. 代码风格规范

### 2.1 Vue组件结构
```vue
<script setup lang="ts">
// 1. 类型导入
import type { FileInfo } from '@/shared/types'

// 2. 组件导入
import FileItem from './FileItem.vue'

// 3. 组合式函数
import { useFileList } from '../composables/useFileList'

// 4. Props/Emits 定义
const props = defineProps<{
  path: string
}>()

const emit = defineEmits<{
  'file-select': [file: FileInfo]
}>()

// 5. 组合式函数调用
const { files, isLoading } = useFileList(props.path)

// 6. 计算属性
const sortedFiles = computed(() => 
  [...files.value].sort((a, b) => a.name.localeCompare(b.name))
)

// 7. 事件处理
const handleFileSelect = (file: FileInfo) => {
  emit('file-select', file)
}
</script>

<template>
  <div class="file-list">
    <div v-if="isLoading">Loading...</div>
    <FileItem
      v-else
      v-for="file in sortedFiles"
      :key="file.path"
      :file="file"
      @select="handleFileSelect"
    />
  </div>
</template>
```

### 2.2 TypeScript 使用规范
```typescript
// 使用 type 而不是 interface
type FileWatcherOptions = {
  path: string
  recursive?: boolean
  ignore?: string[]
}

// 常量定义
const FILE_EVENTS = {
  CREATED: 'created',
  MODIFIED: 'modified',
  DELETED: 'deleted',
} as const

// 组合式函数
export const useFileWatcher = (options: FileWatcherOptions) => {
  const isWatching = ref(false)
  const error = ref<Error | null>(null)

  // 返回组合式函数的响应式状态
  return {
    isWatching,
    error
  }
}
```

## 3. 功能实现规范

### 3.1 错误处理
```typescript
// 使用自定义错误类型
type ErrorType = {
  code: string
  message: string
  details?: unknown
}

// 错误处理函数
const handleError = (error: ErrorType) => {
  console.error(`[${error.code}] ${error.message}`, error.details)
}
```

### 3.2 状态管理
```typescript
// 使用组合式函数管理状态
export const useFileStore = () => {
  const files = ref<FileInfo[]>([])
  const isLoading = ref(false)

  const addFile = (file: FileInfo) => {
    files.value.push(file)
  }

  return {
    files,
    isLoading,
    addFile
  }
}
```

## 4. 测试规范

### 4.1 单元测试
```typescript
import { describe, it, expect } from 'vitest'
import { useFileWatcher } from './useFileWatcher'

describe('useFileWatcher', () => {
  it('should watch files', async () => {
    const { isWatching } = useFileWatcher({
      path: './test'
    })

    expect(isWatching.value).toBe(true)
  })
})
```

## 5. Git 提交规范

### 5.1 提交消息格式
```
<type>: <description>

[optional body]
```

类型:
- feat: 新功能
- fix: 修复
- docs: 文档更新
- style: 代码格式
- refactor: 重构
- test: 测试
- chore: 构建/工具

### 5.2 分支管理
- main: 主分支
- dev: 开发分支
- feature/*: 功能分支
- fix/*: 修复分支

## 6. 性能优化规范

### 6.1 代码优化
- 使用 `shallowRef` 代替 `ref` 处理大型对象
- 使用 `v-memo` 缓存不经常变化的列表项
- 实现虚拟滚动处理大量数据

### 6.2 构建优化
- 使用动态导入拆分代码
- 优化依赖包大小
- 启用构建缓存

## 7. 文档规范

### 7.1 注释规范
```typescript
/**
 * 计算文件哈希值
 * 
 * @description
 * 使用 MD5 算法计算文件的哈希值,用于文件完整性校验
 * 对于大文件,使用流式处理避免内存占用过大
 * 
 * @param filePath - 文件路径
 * @returns Promise<string> - 返回文件的 MD5 哈希值
 * 
 * @throws {FileNotFoundError} 当文件不存在时抛出
 * @throws {PermissionError} 当没有文件读取权限时抛出
 * 
 * @example
 * ```typescript
 * const hash = await calculateFileHash('example.txt')
 * console.log(`文件哈希值: ${hash}`)
 * ```
 */
async function calculateFileHash(filePath: string): Promise<string> {
  // 实现代码...
}
```

### 7.2 学习资源
- 每个核心功能模块添加学习指南
- 包含相关的技术文档链接
- 提供进阶学习建议

### 7.3 开发日志
- 记录重要决策和原因
- 记录遇到的问题和解决方案
- 作为学习参考和经验积累

## 8. 代码审查清单

### 8.1 提交前检查
- [ ] 代码是否符合设计文档
- [ ] 测试是否全部通过
- [ ] 注释是否完整清晰
- [ ] 是否偏离主线任务
- [ ] 是否考虑了异常情况
- [ ] 是否有不必要的改动
- [ ] 相关文档是否更新

### 8.2 代码质量检查
- [ ] 代码是否简洁清晰
- [ ] 变量命名是否合适
- [ ] 是否有重复代码
- [ ] 是否有性能问题
- [ ] 是否有安全隐患
- [ ] 是否便于维护和扩展
typescript
vite
vitest
vue.js

First Time Repository

云中书(Snapshot Keeper)- 一个用于学习现代桌面应用开发的示例项目,实现了一个简单的文件版本管理系统。

TypeScript

Languages:

TypeScript: 0.3KB
Created: 1/6/2025
Updated: 1/6/2025

All Repositories (1)

云中书(Snapshot Keeper)- 一个用于学习现代桌面应用开发的示例项目,实现了一个简单的文件版本管理系统。