Files
whale-town-front/.claude/skills/whaletown-developer/references/checklist.md
lzdFeiFei 43e0c2b928 feat:添加whaletown-developer标准开发工作流技能
- 创建whaletown-developer skill自动化7步开发流程
- 添加完整的使用说明文档和质量检查清单
- 更新CLAUDE.md集成标准开发工作流说明
- 新增标准开发工作流详细文档

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 00:46:48 +08:00

8.4 KiB
Raw Blame History

WhaleTown Development Quality Checklist

快速参考检查清单,用于验证代码是否符合项目规范。

架构检查清单

文件位置

  • 核心系统文件位于 _Core/managers/_Core/systems/
  • 游戏场景文件位于 scenes/Maps/, scenes/Entities/, scenes/Components/
  • UI 组件文件位于 scenes/ui/
  • 测试文件位于 tests/unit/tests/integration/

通信方式

  • 跨模块通信使用 EventSystem
  • 新增事件定义在 _Core/EventNames.gd
  • 遵循 "Signal Up, Call Down" 原则
  • 父节点调用子节点方法(向下调用)
  • 子节点发出信号通知父节点(向上信号)

依赖管理

  • 仅使用允许的自动加载GameManager, SceneManager, EventSystem, NetworkManager, ResponseHandler
  • 底层实体Player, NPC不直接访问 GameManager
  • 底层实体通过事件系统与全局管理器通信

代码规范检查清单

类型安全

  • 所有变量都有类型注解:var speed: float = 200.0
  • 所有函数都有参数和返回值类型:func move(delta: float) -> void:
  • 常量都有类型注解:const MAX_HEALTH: int = 100

Godot 4.2+ 语法

  • 使用 await 代替 yield()
  • 使用 @onready 缓存节点引用
  • 避免在 _process() 中使用 get_node()
  • 信号连接使用 .connect() 语法

资源设置

  • 所有 Sprite2D 使用 Nearest 滤镜(不使用 Linear
  • 所有 TileMap 使用 Nearest 滤镜

命名规范检查清单

类名

  • 使用 PascalCaseclass_name PlayerController
  • 文件名与类名一致:PlayerController.gd

变量

  • 公共变量使用 camelCasevar moveSpeed: float
  • 私有变量使用下划线前缀:var _velocity: Vector2
  • 布尔变量使用 is/has/can 前缀:var isJumping: bool

函数

  • 使用 camelCasefunc updateMovement()
  • 获取函数使用 get 前缀:func getPlayerPosition()
  • 设置函数使用 set 前缀:func setHealth(value: int)
  • 判断函数使用 is/has/can 前缀:func isAlive(), func canJump()
  • 私有函数使用下划线前缀:func _calculateDamage()

常量

  • 使用 UPPER_CASEconst MAX_HEALTH: int = 100
  • 使用下划线分隔:const JUMP_FORCE: float = -400.0

枚举

  • 枚举类型使用 PascalCaseenum PlayerState
  • 枚举值使用 UPPER_CASEIDLE, WALKING, RUNNING

文件命名

  • 脚本文件PascalCase.gd (PlayerController.gd)
  • 场景文件snake_case_scene.tscn (main_scene.tscn)
  • 预制体文件snake_case_prefab.tscn (player_prefab.tscn)
  • 资源文件snake_case (sprite_player_idle.png)

注释规范检查清单

文件头注释

  • 包含文件名
  • 包含作用描述
  • 列出主要功能
  • 列出依赖的管理器/系统
  • 包含作者和创建时间

示例:

# ============================================================================
# 文件名: PlayerController.gd
# 作用: 玩家角色控制器,处理玩家输入和移动逻辑
#
# 主要功能:
# - 处理键盘和手柄输入
# - 控制角色移动和跳跃
# - 管理角色状态切换
#
# 依赖: EventSystem, InputManager
# 作者: [开发者名称]
# 创建时间: 2025-01-03
# ============================================================================

函数注释

  • 公共函数有完整注释
  • 包含功能描述
  • 列出参数说明(名称、类型、含义)
  • 说明返回值(类型、含义)
  • 提供使用示例(对于复杂函数)
  • 标注注意事项(如果有)

示例:

# 处理玩家输入并更新移动状态
#
# 参数:
#   delta: float - 帧时间间隔
#
# 返回值: 无
#
# 注意事项:
# - 需要在 _physics_process 中调用
# - 会自动处理重力和碰撞
func handleMovement(delta: float) -> void:

行内注释

  • 复杂逻辑有注释说明
  • 注释解释 WHY为什么不解释 WHAT是什么
  • 避免显而易见的注释
  • 使用 TODO/FIXME/NOTE 等标记

测试规范检查清单

测试文件

  • _Core/ 中的管理器/系统都有对应测试文件
  • 测试文件位于 tests/unit/tests/integration/
  • 测试文件命名:test_[name].gd
  • 测试文件继承自 GutTestextends GutTest

测试结构

  • 包含测试类注释
  • 实现 before_each() 进行测试前置设置
  • 实现 after_each() 进行测试清理
  • 测试方法命名:test_[功能名称]()

测试覆盖

  • 测试核心功能的正常流程
  • 测试错误处理和边界条件
  • 测试初始化和清理逻辑
  • 所有测试都能通过

示例:

extends GutTest

## PlayerController 单元测试

var player: PlayerController

func before_each():
    player = preload("res://scenes/Entities/Player/PlayerController.gd").new()
    add_child(player)

func after_each():
    player.queue_free()

func test_initialization():
    var result = player.initialize()
    assert_true(result, "Player should initialize successfully")

func test_movement():
    # 测试移动功能
    pass

Git 提交规范检查清单

提交类型

  • 使用正确的提交类型:
    • feat - 新功能
    • fix - Bug 修复
    • docs - 文档更新
    • refactor - 代码重构
    • test - 测试相关
    • scene - 场景文件
    • ui - UI 相关

提交格式

  • 使用中文冒号(:)
  • 描述简洁明了(< 50 字符)
  • 使用动词开头(添加、修复、更新)
  • 一次提交只包含一种类型的改动

提交原则

  • 一次提交只做一件事
  • 提交的代码能够正常运行
  • 避免 fix + feat 混合提交
  • 如需多种改动,拆分成多次提交

示例:

# ✅ 正确
git commit -m "feat实现玩家二段跳功能"
git commit -m "fix修复角色跳跃时的碰撞检测问题"
git commit -m "test添加角色控制器单元测试"

# ❌ 错误
git commit -m "fix + feat修复Bug并添加新功能"  # 混合类型
git commit -m "update player"                    # 描述不清晰,使用英文
git commit -m "fix: 修复Bug"                     # 使用英文冒号

完整工作流检查清单

使用此清单验证开发任务是否完整执行 7 步工作流:

Step 1: 架构分析

  • 已读取 docs/02-开发规范/架构与通信规范.md
  • 已确定文件位置_Core, scenes, UI
  • 已确定通信方式EventSystem
  • 已列出依赖的管理器/系统
  • 已设计事件定义(如需要)

Step 2: 功能实现

  • 代码遵循分层架构
  • 所有变量和函数有类型注解
  • 使用 Godot 4.2+ 语法
  • 使用 EventSystem 进行跨模块通信
  • 使用 @onready 缓存节点引用

Step 3: 注释规范检查

  • 已读取 docs/02-开发规范/代码注释规范.md
  • 文件头注释完整
  • 公共函数有完整注释
  • 复杂逻辑有行内注释

Step 4: 命名规范检查

  • 已读取 docs/02-开发规范/命名规范.md
  • 类名使用 PascalCase
  • 变量/函数使用 camelCase
  • 常量使用 UPPER_CASE
  • 私有成员使用下划线前缀

Step 5: 测试代码编写

  • 已读取 docs/03-技术实现/测试指南.md
  • 创建了测试文件 tests/unit/test_[name].gd
  • 测试文件继承自 GutTest
  • 编写了核心功能测试

Step 6: 测试验证

  • 运行了 GUT 测试命令
  • 所有测试通过
  • 如有失败,已修复并重新测试

Step 7: Git 提交

  • 已读取 docs/02-开发规范/Git提交规范.md
  • 生成了符合规范的提交信息
  • 提交类型正确
  • 使用中文冒号
  • 遵循"一次提交只做一件事"原则

快速自检问题

在提交代码前,问自己以下问题:

  1. 架构: 文件放在正确的位置了吗?
  2. 通信: 是否使用 EventSystem 进行跨模块通信?
  3. 类型: 所有变量和函数都有类型注解吗?
  4. 命名: 命名是否符合规范PascalCase/camelCase/UPPER_CASE
  5. 注释: 文件头和公共函数有完整注释吗?
  6. 测试: 创建并运行测试了吗?所有测试都通过了吗?
  7. 提交: Git 提交信息符合规范吗?

如果以上问题都能回答"是",那么代码已经符合 WhaleTown 项目的质量标准!