Files
mcp-bridge/CODE_REVIEW.md
2026-02-02 10:20:22 +08:00

203 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` | ✅ | 粒子系统 |