203 lines
6.4 KiB
Markdown
203 lines
6.4 KiB
Markdown
|
|
# 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` | ✅ | 粒子系统 |
|