Skip to content

Commit

Permalink
🐛 fix(core): 修复文件选择和国际化问题
Browse files Browse the repository at this point in the history
- 【功能修复】修复代码评审时文件选择逻辑问题
- 【国际化】添加无效文件选择的提示文案
- 【代码优化】优化 CodeReviewReportGenerator 中的本地化管理器调用
- 【调试】在错误处理中添加日志输出
- 【重构】将文件选择逻辑抽取为独立方法以提高代码复用性
  • Loading branch information
littleCareless committed Jan 24, 2025
1 parent 8226347 commit 4bd85f6
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 25 deletions.
1 change: 1 addition & 0 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
"review.results.title": "Code Review Results",
"codeReview.generation.failed": "Code review generation failed: {0}",
"no.changes.selected": "No files selected for review",
"please.select.valid.files": "Some selected files are invalid, please reselect files for review",
"no.changes.found": "No changes found for review",
"review.file.failed": "Failed to review file: {0}",
"code.review.failed": "Code review failed: {0}",
Expand Down
1 change: 1 addition & 0 deletions i18n/zh-cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
"codeReview.generation.failed": "代码评审生成失败: {0}",
"model.list.empty": "模型列表为空",
"no.changes.selected": "未选择任何待评审的文件",
"please.select.valid.files": "选择的文件中包含无效项,请重新选择要评审的文件",
"no.changes.found": "未找到需要评审的变更",
"review.file.failed": "评审文件失败: {0}",
"code.review.failed": "代码评审失败: {0}",
Expand Down
2 changes: 2 additions & 0 deletions src/ai/providers/VscodeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ IMPORTANT: You must respond with a valid JSON object following this schema:
CodeReviewReportGenerator.generateMarkdownReport(reviewResult),
};
} catch (ex: Error | any) {
console.log("ex", ex);

let message = ex instanceof Error ? ex.message : String(ex);

if (
Expand Down
52 changes: 39 additions & 13 deletions src/commands/ReviewCodeCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,42 @@ import * as path from "path";
* @extends {BaseCommand}
*/
export class ReviewCodeCommand extends BaseCommand {
/**
* 获取选中的文件列表
* @param resourceStates - 源代码管理资源状态
* @returns 文件路径列表
*/
protected getSelectedFiles(
resourceStates?:
| vscode.SourceControlResourceState
| vscode.SourceControlResourceState[]
): string[] | undefined {
if (!resourceStates) {
return undefined;
}

const states = Array.isArray(resourceStates)
? resourceStates
: [resourceStates];

return [
...new Set(
states
.map(
(state) =>
(state as any)?._resourceUri?.fsPath || state?.resourceUri?.fsPath
)
.filter(Boolean)
),
];
}

/**
* 执行代码审查命令
* @param {vscode.SourceControlResourceState[]} resources - 源代码管理资源状态列表,代表需要审查的文件
* @param {vscode.SourceControlResourceState[] | undefined} resources - 源代码管理资源状态列表,代表需要审查的文件
* @returns {Promise<void>}
*/
async execute(resources: vscode.SourceControlResourceState[]) {
async execute(resources?: vscode.SourceControlResourceState[]) {
// 处理配置
const configResult = await this.handleConfiguration();
if (!configResult) {
Expand All @@ -26,7 +56,8 @@ export class ReviewCodeCommand extends BaseCommand {

try {
// 检查是否有选中的文件
if (!resources || resources.length === 0) {
const selectedFiles = this.getSelectedFiles(resources);
if (!selectedFiles || selectedFiles.length === 0) {
NotificationHandler.warn(
this.locManager.getMessage("no.changes.selected")
);
Expand Down Expand Up @@ -56,25 +87,20 @@ export class ReviewCodeCommand extends BaseCommand {
// 获取所有选中文件的差异
const fileReviews = new Map<string, string>();
const diffs = new Map<string, string>();

// 并行收集所有差异 - 10% 进度
const diffPromises = resources.map(async (resource) => {
const selectedFiles = this.getSelectedFiles(resource);
const diffPromises = selectedFiles.map(async (filePath) => {
try {
const diff = await scmProvider.getDiff(selectedFiles);
const diff = await scmProvider.getDiff([filePath]);
if (diff) {
diffs.set(resource.resourceUri.fsPath, diff);
diffs.set(filePath, diff);
}
progress.report({
increment: 10 / resources.length,
increment: 10 / selectedFiles.length,
message: this.locManager.getMessage("getting.file.changes"),
});
return { success: true };
} catch (error) {
console.error(
`Failed to get diff for ${resource.resourceUri.fsPath}:`,
error
);
console.error(`Failed to get diff for ${filePath}:`, error);
return { success: false };
}
});
Expand Down
36 changes: 24 additions & 12 deletions src/utils/CodeReviewReportGenerator.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { CodeReviewResult, CodeReviewIssue } from "../ai/types";
import * as vscode from "vscode";
import * as vscode from "vscode";
import { LocalizationManager } from "../utils/LocalizationManager";

/**
* 代码审查报告生成器,将代码审查结果转换为格式化的 Markdown 文档
*/
export class CodeReviewReportGenerator {
private static readonly locManager = LocalizationManager.getInstance();

/**
* 不同严重程度对应的 emoji 图标
* @private
*/
private static readonly severityEmoji = {
NOTE: "💡", // 提示
WARNING: "⚠️", // 警告
ERROR: "🚨", // 错误
NOTE: "💡", // 提示
WARNING: "⚠️", // 警告
ERROR: "🚨", // 错误
};

/**
Expand Down Expand Up @@ -59,8 +59,12 @@ export class CodeReviewReportGenerator {
* @returns {string} Markdown 格式的报告头部
*/
private static generateHeader(summary: string): string {
const title = this.locManager.getMessage("codeReview.report.title");
const summaryLabel = this.locManager.getMessage("codeReview.report.summary");
const title = LocalizationManager.getInstance().getMessage(
"codeReview.report.title"
);
const summaryLabel = LocalizationManager.getInstance().getMessage(
"codeReview.report.summary"
);
return `# ${title}\n\n## ${summaryLabel}\n\n${summary}\n\n`;
}

Expand All @@ -73,7 +77,9 @@ export class CodeReviewReportGenerator {
private static generateDetailedFindings(
sections: Record<string, CodeReviewIssue[]>
): string {
const findings = this.locManager.getMessage("codeReview.report.findings");
const findings = LocalizationManager.getInstance().getMessage(
"codeReview.report.findings"
);
let markdown = `## ${findings}\n\n`;

// 遍历每个文件的问题
Expand All @@ -99,10 +105,14 @@ export class CodeReviewReportGenerator {
let section = `#### ${this.severityEmoji[issue.severity]} ${
issue.severity
}: Line ${issue.startLine}${issue.endLine ? `-${issue.endLine}` : ""}\n\n`;

// 添加问题描述和建议
section += `**${this.locManager.getMessage("codeReview.issue.label")}** ${issue.description}\n\n`;
section += `**${this.locManager.getMessage("codeReview.suggestion.label")}** ${issue.suggestion}\n\n`;
section += `**${LocalizationManager.getInstance().getMessage(
"codeReview.issue.label"
)}** ${issue.description}\n\n`;
section += `**${LocalizationManager.getInstance().getMessage(
"codeReview.suggestion.label"
)}** ${issue.suggestion}\n\n`;

// 如果有代码示例,添加代码块
if (issue.code) {
Expand All @@ -111,7 +121,9 @@ export class CodeReviewReportGenerator {

// 如果有相关文档,添加链接
if (issue.documentation) {
const docLabel = this.locManager.getMessage("codeReview.documentation.label");
const docLabel = LocalizationManager.getInstance().getMessage(
"codeReview.documentation.label"
);
section += `📚 [${docLabel}](${issue.documentation})\n\n`;
}

Expand Down

0 comments on commit 4bd85f6

Please sign in to comment.