Files
2026Technology-Competition/docs/superpowers/specs/2026-07-10-code-reviewer-design.md
T

232 lines
5.6 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.
# Code Reviewer — VSCode Extension Design Spec
## 1. 概述
VSCode 代码审查与规范检查一体化工具。集成多语言静态分析器与 AI 智能审查,为开发团队提供代码质量保障。
### 核心能力
- 多语言代码静态分析(ESLint、Ruff、Clippy 等)
- AI 辅助深度审查与问题解释
- 自定义规则检查
- 自动修复建议与批量修复
- 可视化审查报告面板
---
## 2. 架构总览
插件分为三层:
```
UI 层 — TreeView 面板 / Inline Diagnostic / Code Action
核心层 — Linter 管理器 + AI 审查引擎(均实现 Analyzer 接口)
基础层 — 配置管理 / 规则管理 / 报告导出
```
所有 linter 和 AI 审查器统一实现 `Analyzer` 接口,结果聚合后通过 VSCode `DiagnosticCollection` 展示。
---
## 3. Analyzer 接口
```typescript
interface AnalyzerResult {
file: string;
line: number;
column: number;
severity: 'error' | 'warning' | 'info' | 'hint';
message: string;
ruleId: string;
source: string;
fix?: Fix;
aiExplanation?: string;
}
interface Analyzer {
readonly name: string;
readonly language: string[];
analyze(document: vscode.TextDocument): Promise<AnalyzerResult[]>;
fix?(result: AnalyzerResult): vscode.TextEdit[];
}
```
### 内置 Analyzer
| Analyzer | 语言 | 调用方式 |
|----------|------|---------|
| EslintAnalyzer | JS/TS/JSX/TSX | eslint CLI --format json |
| RuffAnalyzer | Python | ruff check --output-format json |
| ClippyAnalyzer | Rust | cargo clippy --message-format json |
| AiAnalyzer | 通用 | LLM API |
---
## 4. Linter 管理器
### 自动检测
插件扫描工作区根目录,根据配置文件自动识别启用的 linter:
| Linter | 检测标志 |
|--------|---------|
| ESLint | `.eslintrc*``package.json` 中的 `eslintConfig` |
| Ruff | `ruff.toml``pyproject.toml` 中的 `[tool.ruff]` |
| Clippy | `Cargo.toml` 含 clippy 依赖 |
未检测到配置时可降级为默认配置运行。
### 执行策略
- **保存触发**:文件保存时自动运行,debounce 500ms(可配置)
- **手动触发**:命令面板、右键菜单、文件树右键
- **进度反馈**:运行时显示 `withProgress`
---
## 5. AI 审查引擎
`AiAnalyzer` 作为特殊 Analyzer 注册,通过 LLM API 审查代码。
### 配置
```typescript
interface AiReviewConfig {
provider: 'openai' | 'custom';
apiKey: string;
model: string;
maxTokens: number;
customEndpoint?: string;
}
```
### 工作流
1. 用户触发 AI 审查(整个文件或选中代码)
2. 收集代码 + 上下文 → 构建 Prompt
3. 调用 LLM API → 解析 JSON 响应
4. 结果转为 `AnalyzerResult[]` → 注入 Diagnostic
### Prompt 策略
- System Prompt:审查专家角色 + JSON 格式约束
- 支持传入自定义规则列表
- 响应强制 JSON 格式
---
## 6. 插件贡献点
### Commands
| 命令 | 说明 |
|------|------|
| `codeReviewer.analyzeFile` | 审查当前文件 |
| `codeReviewer.analyzeWorkspace` | 审查整个工作区 |
| `codeReviewer.aiReview` | AI 深度审查 |
| `codeReviewer.aiExplain` | AI 解释选中问题 |
| `codeReviewer.fixAll` | 批量修复 |
| `codeReviewer.exportReport` | 导出报告 |
### Views
- `codeReviewProblems` — 审查问题树视图(按文件分组)
- `codeReviewSummary` — 审查概况树视图(统计信息 + 导出/批量修复入口)
### Configuration
| 配置项 | 类型 | 说明 |
|--------|------|------|
| `codeReviewer.linters` | object | 启用的 linter 配置 |
| `codeReviewer.ai.enabled` | boolean | 启用 AI 审查 |
| `codeReviewer.ai.provider` | enum | AI 提供商 |
| `codeReviewer.ai.apiKey` | string | API 密钥 |
| `codeReviewer.ai.model` | string | 模型名 |
---
## 7. 审查报告面板
### 问题列表视图(codeReviewProblems
- 按文件分组展示所有问题
- 每个问题显示:严重级别图标、规则 ID、消息、行号、来源标记
- 点击跳转到对应位置
- 右键菜单:AI 解释 / 快速修复 / 忽略规则
### 概况视图(codeReviewSummary
- 总计、按严重级别分布、按来源分布、按文件分布
- 导出报告按钮、批量修复按钮
---
## 8. Code Action 与批量修复
### Code Action 提供者
`CodeReviewCodeActionProvider` 为 diagnostic 提供:
1. **快速修复** — 若 analyzer 提供了 `fix()` 方法
2. **AI 解释** — 调用 AI 翻译/解释问题
3. **添加忽略注释** — 自动插入 linter 忽略标记
### 批量修复
- 遍历所有含 `fix` 的问题,按文件分组
- 使用 `WorkspaceEdit` 批量应用 TextEdit
- 显示修复总结
### 忽略机制
- 右键"忽略此规则" → 写入 `.codereviewerignore`
---
## 9. 文件结构
```
src/
├── extension.ts
├── activation/
│ ├── registerCommands.ts
│ ├── registerViews.ts
│ └── registerCodeActions.ts
├── analyzers/
│ ├── analyzer.ts
│ ├── eslintAnalyzer.ts
│ ├── ruffAnalyzer.ts
│ ├── clippyAnalyzer.ts
│ └── aiAnalyzer.ts
├── manager/
│ └── linterManager.ts
├── views/
│ ├── problemTreeProvider.ts
│ └── summaryTreeProvider.ts
├── services/
│ ├── aiService.ts
│ └── configService.ts
├── utils/
│ ├── diagnosticHelper.ts
│ └── linterDetector.ts
└── types.ts
```
---
## 10. 排除范围(非本期实现)
- 与 GitHub/GitLab PR Review API 集成
- 多人协作审查工作流
- WebView 可视化报告页面
- 自定义规则 DSL
---
## 11. 技术栈
- VSCode Extension API (^1.120.0)
- TypeScript (ES2022, Node16 module)
- ESLint + typescript-eslint
- Mocha + @vscode/test-electron
- LLM APIopenai 兼容接口)