Wingman-AI 开源项目使用教程
1. 项目的目录结构及介绍
wingman-ai/
├── .github/
│ └── workflows/
├── assets/
├── docs/
├── src/
│ ├── commands/
│ ├── completions/
│ ├── providers/
│ ├── services/
│ ├── utils/
│ └── extension.ts
├── .gitignore
├── LICENSE
├── README.md
├── package.json
└── tsconfig.json
- .github/workflows: 包含GitHub Actions的工作流配置文件。
- assets: 存放项目相关的静态资源文件。
- docs: 存放项目的文档文件。
- src: 项目的源代码目录。
- commands: 包含VSCode命令的实现。
- completions: 代码补全相关的逻辑。
- providers: AI服务提供者的实现。
- services: 服务层代码。
- utils: 工具函数和辅助类。
- extension.ts: 项目的入口文件。
- .gitignore: Git忽略文件配置。
- LICENSE: 项目的开源许可证。
- README.md: 项目说明文档。
- package.json: 项目的依赖和脚本配置。
- tsconfig.json: TypeScript配置文件。
2. 项目的启动文件介绍
项目的启动文件是 src/extension.ts
。这个文件是VSCode扩展的入口点,负责初始化扩展和注册命令。
import * as vscode from 'vscode';
import { registerCommands } from './commands';
export function activate(context: vscode.ExtensionContext) {
registerCommands(context);
}
export function deactivate() {}
- activate: 当扩展被激活时调用,注册所有命令。
- deactivate: 当扩展被停用时调用,进行清理工作。
3. 项目的配置文件介绍
- package.json: 包含项目的元数据、依赖和脚本。
{
"name": "wingman-ai",
"displayName": "Wingman AI",
"version": "1.0.0",
"description": "An open source AI coding assistant VSCode extension",
"publisher": "RussellCanfield",
"engines": {
"vscode": "^1.50.0"
},
"categories": [
"Other"
],
"activationEvents": [
"onCommand:wingman-ai.start"
],
"main": "./src/extension.ts",
"contributes": {
"commands": [
{
"command": "wingman-ai.start",
"title": "Start Wingman AI"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"pretest": "npm run compile && npm run lint",
"lint": "eslint src --ext ts",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@types/vscode": "^1.50.0",
"@types/glob": "^7.1.3",
"@types/mocha": "^8.0.4",
"@types/node": "^12.11.7",
"eslint": "^7.10.0",
"glob": "^7.1.6",
"mocha": "^8.1.3",
"typescript": "^4.0.3",
"vscode-test": "^1.4.0"
}
}
- tsconfig.json: TypeScript编译配置。
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "out",
"sourceMap": true,
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"src"
]