来源: everything-claude-code by Affaan Mustafa 原始文件: rules/common/coding-style.md + rules/typescript/coding-style.md + rules/python/coding-style.md + rules/golang/coding-style.md
编码标准(Coding Standards)
概述
一套跨语言的通用编码风格规则,强调不可变性(Immutability)、小文件组织、全面的错误处理和输入验证。同时包含 TypeScript/JavaScript、Python 和 Go 三种语言的特定补充规范。
二、TypeScript/JavaScript 编码风格
此部分扩展了通用编码风格,包含 TypeScript/JavaScript 特定内容。
适用文件
**/*.ts、**/*.tsx、**/*.js、**/*.jsx
不可变性
使用展开运算符(Spread operator)进行不可变更新:
// 错误:可变操作
function updateUser(user, name) {
user.name = name // 可变操作!
return user
}
// 正确:不可变操作
function updateUser(user, name) {
return {
...user,
name
}
}
错误处理
使用 async/await 配合 try-catch:
try {
const result = await riskyOperation()
return result
} catch (error) {
console.error('操作失败:', error)
throw new Error('详细的用户友好消息')
}
输入验证
使用 Zod 进行基于 Schema 的验证:
import { z } from 'zod'
const schema = z.object({
email: z.string().email(),
age: z.number().int().min(0).max(150)
})
const validated = schema.parse(input)
console.log 规则
- 生产代码中禁止
console.log语句 - 使用专业的日志库替代
- 参见 hooks 进行自动检测
三、Python 编码风格
此部分扩展了通用编码风格,包含 Python 特定内容。
适用文件
**/*.py、**/*.pyi
标准
- 遵循 PEP 8 约定
- 所有函数签名使用类型注解(Type annotations)
不可变性
优先使用不可变数据结构:
from dataclasses import dataclass
@dataclass(frozen=True)
class User:
name: str
email: str
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: float
格式化工具
- black 用于代码格式化
- isort 用于导入排序
- ruff 用于代码检查(Linting)
四、Go 编码风格
此部分扩展了通用编码风格,包含 Go 特定内容。
适用文件
**/*.go、**/go.mod、**/go.sum
格式化
- gofmt 和 goimports 是强制性的 -- 无需风格争论
设计原则
- 接受接口(Interface),返回结构体(Struct)
- 保持接口精简(1-3 个方法)
错误处理
始终使用上下文包装错误:
if err != nil {
return fmt.Errorf("failed to create user: %w", err)
}
五、总结
| 原则 | 要求 |
|---|---|
| 不可变性 | 始终创建新对象,不修改已有对象 |
| 文件大小 | 典型 200-400 行,最大 800 行 |
| 函数大小 | 不超过 50 行 |
| 嵌套深度 | 不超过 4 层 |
| 错误处理 | 每一层显式处理,绝不静默吞掉 |
| 输入验证 | 在系统边界处始终验证 |
| 硬编码值 | 使用常量或配置替代 |