Files
mcp-bridge/CODE_REVIEW.md

203 lines
6.4 KiB
Markdown
Raw Normal View History

2026-02-02 10:20:22 +08:00
# 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` | ✅ | 粒子系统 |