Files
bigwo/dev-assistant-mcp/dist/tools/codeWrite.js
2026-03-12 12:47:56 +08:00

162 lines
4.8 KiB
JavaScript
Raw Permalink 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.

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