From 12be1dc62d3c039a0cd890b72a2290fd7107dfe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=AB=E7=84=B0=E5=BA=93=E6=8B=89?= Date: Mon, 2 Feb 2026 10:20:22 +0800 Subject: [PATCH] docs: add code review report --- CODE_REVIEW.md | 202 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 CODE_REVIEW.md diff --git a/CODE_REVIEW.md b/CODE_REVIEW.md new file mode 100644 index 0000000..9365deb --- /dev/null +++ b/CODE_REVIEW.md @@ -0,0 +1,202 @@ +# MCP Bridge 插件代码审查报告 + +**审查日期**: 2026-02-02 +**审查人**: AI Assistant + +## 📋 审查概要 + +| 项目 | 状态 | +|------|------| +| 代码行数 | `main.js` (1560行), `scene-script.js` (560行) | +| 测试脚本 | 4个 (`run_tests.js`, `test_find_file.js`, `test_undo.js`, `test_vfx.js`) | +| 功能完成度 | **高** - 大部分核心功能已实现 | +| 代码质量 | **中等** - 存在重复代码和结构问题 | + +--- + +## 🔴 高优先级问题 (需要立即修复) + +### 1. 重复函数定义 (严重) + +在 `main.js` 中发现以下重复定义的函数: + +| 函数名 | 第一次出现 | 第二次出现 | +|--------|-----------|-----------| +| `validateScript` | 行 1337-1369 | 行 1424-1456 | +| `get-server-state` (message) | 行 1375-1377 | 行 1408-1415 | +| `executeMenuItem` | 行 1243-1254 | 行 1317-1335 (同名但实现不同) | + +> ⚠️ **警告**: 重复函数会导致后定义的覆盖先定义的,可能造成意外行为。第二个 `validateScript` (行 1424-1456) 使用了 `loadMeta` 而不是 `loadAny`,可能无法正确读取脚本内容。 + +**建议修复**: +- 删除重复的 `validateScript` 函数 (保留行 1337-1369 的版本,它使用 `loadAny`) +- 合并两个 `get-server-state` 消息处理器 (第二个更完整,包含 `autoStart`) +- 审查并合并两个 `executeMenuItem` 的实现 + +--- + +### 2. TypeScript 脚本验证缺失 + +```javascript +// 对于 TypeScript 脚本,这里可以添加更复杂的验证逻辑 +callback(null, { valid: true, message: 'Script syntax is valid' }); +``` + +`validate_script` 工具对 TypeScript `.ts` 文件没有实际验证逻辑,直接返回 valid: true。 + +**建议修复**: +- 集成 TypeScript 编译器进行语法检查 +- 或者使用 `require('typescript').transpileModule()` 进行基本验证 + +--- + +## 🟡 中优先级问题 (建议修复) + +### 3. 菜单项执行功能受限 + +```javascript +// 通用尝试 (可能不工作,取决于编辑器版本) +// Editor.Ipc.sendToMain('ui:menu-click', menuPath); +// 兜底:仅记录日志,暂不支持通用菜单点击 +addLog("warn", "Generic menu execution partial support."); +``` + +`execute_menu_item` 工具只对 `File/Save Scene` 有实际作用,其他菜单项仅记录日志。 + +**建议修复**: +- 调研 Cocos Creator 2.4.x 的菜单执行 IPC 接口 +- 或者添加常用菜单项的映射表 + +--- + +### 4. 颜色属性 Undo 不支持 + +```javascript +// 暂且忽略颜色的 Undo,先保证 Transform 的 Undo。 +Editor.Scene.callSceneScript("mcp-bridge", "update-node-transform", { id, color }, (err) => { + if (err) addLog("warn", "Color update failed or partial"); +}); +``` + +`update_node_transform` 中位置和缩放使用 `scene:set-property` 支持 Undo,但颜色通过 scene-script 修改,不支持 Undo。 + +**建议修复**: +- 研究如何通过 `scene:set-property` 设置颜色属性 + +--- + +### 5. 材质/纹理创建功能不完整 + +`manage_material` 和 `manage_texture` 的 `create` 操作创建的是 JSON 元数据文件,而不是真正的材质或纹理资源。 + +```javascript +// 创建材质资源 +const materialContent = JSON.stringify({ + __type__: "cc.Material", + // ... +}); +``` + +**建议修复**: +- 文档中说明此工具的限制 +- 或者使用 Cocos Creator 的资源创建 API + +--- + +## 🟢 低优先级问题 (可优化) + +### 6. 缺失的功能模块 + +根据 `DEVELOPMENT_PLAN.md`,以下功能未完全实现或可扩展: + +| 功能 | 状态 | 说明 | +|------|------|------| +| Git 集成 (`get_sha`) | ❌ 未实现 | 获取当前版本库信息 | +| ScriptableObject 管理 | ❌ 未实现 | 类似 Unity 的 ScriptableObject | +| 国际化支持 | ❌ 未实现 | 多语言界面 | +| 插件商店发布 | ❌ 未完成 | 打包和发布流程 | + +--- + +### 7. 代码结构优化建议 + +1. **拆分 `main.js`**: 1560 行代码过于庞大,建议拆分为: + - `tools/scene-tools.js` - 场景相关工具 + - `tools/asset-tools.js` - 资源管理工具 + - `tools/editor-tools.js` - 编辑器控制工具 + +2. **统一错误处理**: 部分函数直接 `return callback(error)`,部分使用 `callback(err, null)`,建议统一风格。 + +3. **添加 JSDoc 注释**: 核心函数缺少文档注释。 + +--- + +### 8. 测试覆盖不完整 + +目前测试脚本仅覆盖: +- ✅ 基础连接和节点操作 (`run_tests.js`) +- ✅ 文件搜索 (`test_find_file.js`) +- ✅ 撤销/重做 (`test_undo.js`) +- ✅ 粒子系统 (`test_vfx.js`) + +未覆盖的功能: +- ❌ `manage_material` / `manage_texture` +- ❌ `scene_management` / `prefab_management` +- ❌ `apply_text_edits` +- ❌ `batch_execute` + +--- + +## 📌 修复优先级排序 + +| 序号 | 问题 | 优先级 | 预计工时 | +|------|------|--------|----------| +| 1 | 删除重复函数 | 🔴 高 | 0.5h | +| 2 | 合并 `get-server-state` | 🔴 高 | 0.5h | +| 3 | TypeScript 验证 | 🟡 中 | 2h | +| 4 | 菜单执行增强 | 🟡 中 | 1h | +| 5 | 颜色 Undo 支持 | 🟡 中 | 1h | +| 6 | 测试覆盖扩展 | 🟢 低 | 4h | +| 7 | 代码拆分重构 | 🟢 低 | 8h | + +--- + +## 🚀 下一步行动建议 + +1. **立即修复**: 删除 `main.js` 中的重复函数定义 +2. **短期**: 完善 TypeScript 验证和测试覆盖 +3. **中期**: 优化代码结构,拆分大文件 +4. **长期**: 实现 Git 集成,准备插件商店发布 + +--- + +## 📝 附录:已实现功能清单 + +| 工具名称 | 状态 | 说明 | +|---------|------|------| +| `get_selected_node` | ✅ | 获取选中节点 | +| `set_node_name` | ✅ | 修改节点名称 | +| `save_scene` | ✅ | 保存场景 | +| `get_scene_hierarchy` | ✅ | 获取场景层级 | +| `update_node_transform` | ✅ | 修改节点变换 | +| `create_scene` | ✅ | 创建场景 | +| `create_prefab` | ✅ | 创建预制体 | +| `open_scene` | ✅ | 打开场景 | +| `create_node` | ✅ | 创建节点 | +| `manage_components` | ✅ | 管理组件 | +| `manage_script` | ✅ | 管理脚本 | +| `batch_execute` | ✅ | 批量执行 | +| `manage_asset` | ✅ | 管理资源 | +| `scene_management` | ✅ | 场景管理 | +| `prefab_management` | ✅ | 预制体管理 | +| `manage_editor` | ✅ | 编辑器管理 | +| `find_gameobjects` | ✅ | 查找节点 | +| `manage_material` | ⚠️ | 部分实现 | +| `manage_texture` | ⚠️ | 部分实现 | +| `execute_menu_item` | ⚠️ | 部分实现 | +| `apply_text_edits` | ✅ | 文本编辑 | +| `read_console` | ✅ | 读取控制台 | +| `validate_script` | ⚠️ | 仅支持 JS | +| `find_in_file` | ✅ | 文件搜索 | +| `manage_undo` | ✅ | 撤销/重做 | +| `manage_vfx` | ✅ | 粒子系统 |