Files
bigwo/dev-assistant-mcp/dist/tools/codeWrite.js

162 lines
4.8 KiB
JavaScript
Raw Permalink Normal View History

2026-03-12 12:47:56 +08:00
export const codeWriteTool = {
name: "code_write",
description: "根据需求描述生成代码编写指引。返回结构化的需求分析、技术方案、代码骨架和最佳实践建议。",
inputSchema: {
type: "object",
properties: {
requirement: {
type: "string",
description: "功能需求描述",
},
language: {
type: "string",
description: "编程语言(如 typescript, python, java 等)",
},
framework: {
type: "string",
description: "框架(可选,如 react, express, fastapi 等)",
},
context: {
type: "string",
description: "额外上下文(可选,如现有代码片段、接口定义等)",
},
},
required: ["requirement", "language"],
},
};
const languageBestPractices = {
typescript: [
"使用严格类型,避免 any",
"用 interface/type 定义数据结构",
"async/await 处理异步",
"使用 const 优先,必要时 let",
"错误处理使用 try-catch + 自定义 Error 类",
],
javascript: [
"使用 const/let禁用 var",
"使用 JSDoc 注释函数签名",
"async/await 处理异步",
"使用解构赋值简化代码",
"模块化:每个文件单一职责",
],
python: [
"遵循 PEP 8 风格规范",
"使用 type hints 标注类型",
"使用 dataclass/Pydantic 定义数据模型",
"用 with 语句管理资源",
"异常处理:捕获具体异常而非 Exception",
],
java: [
"遵循 Java 命名约定",
"使用 Optional 避免 NullPointerException",
"用 Stream API 处理集合",
"接口优先于实现",
"使用 Lombok 减少样板代码",
],
};
const frameworkTemplates = {
react: `// React 组件骨架
import React, { useState, useEffect } from 'react';
interface Props {
// TODO: 定义 props
}
export function ComponentName({ }: Props) {
const [state, setState] = useState();
useEffect(() => {
// TODO: 副作用逻辑
}, []);
return (
<div>
{/* TODO: JSX 结构 */}
</div>
);
}`,
express: `// Express 路由骨架
import express from 'express';
const router = express.Router();
router.get('/', async (req, res) => {
try {
// TODO: 业务逻辑
res.json({ success: true, data: {} });
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
export default router;`,
fastapi: `# FastAPI 路由骨架
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
router = APIRouter()
class RequestModel(BaseModel):
# TODO: 定义请求模型
pass
class ResponseModel(BaseModel):
success: bool
data: dict = {}
@router.get("/", response_model=ResponseModel)
async def handler():
try:
# TODO: 业务逻辑
return ResponseModel(success=True, data={})
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))`,
vue: `<!-- Vue 组件骨架 -->
<template>
<div>
<!-- TODO: 模板结构 -->
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
// TODO: 定义响应式状态
const state = ref();
onMounted(() => {
// TODO: 初始化逻辑
});
</script>`,
};
export async function executeCodeWrite(args) {
const { requirement, language, framework, context } = args;
const practices = languageBestPractices[language.toLowerCase()] || [
"遵循语言社区标准",
"添加类型标注",
"做好错误处理",
"保持函数单一职责",
];
const output = [
`# 代码编写指引`,
``,
`## 需求`,
requirement,
``,
`## 技术规格`,
`- **语言**: ${language}`,
];
if (framework) {
output.push(`- **框架**: ${framework}`);
}
output.push(``, `## ${language} 最佳实践`, ...practices.map((p) => `- ${p}`), ``);
if (framework && frameworkTemplates[framework.toLowerCase()]) {
output.push(`## 代码骨架模板`, "```" + language, frameworkTemplates[framework.toLowerCase()], "```", ``);
}
output.push(`## 编写要求`, `1. 代码必须完整可运行,包含所有必要的 import`, `2. 遵循 ${language} 最佳实践和命名规范`, `3. 关键逻辑添加简洁注释`, `4. 包含必要的错误处理和边界检查`, `5. 函数保持单一职责,不超过 50 行`, ``);
if (context) {
output.push(`## 参考上下文`, "```", context, "```", ``);
}
output.push(`## 请根据以上指引生成完整代码`);
return output.join("\n");
}
//# sourceMappingURL=codeWrite.js.map