Skip to content

Commit

Permalink
♻️ refactor(commands): 重构命令处理类的代码结构和类型
Browse files Browse the repository at this point in the history
- 优化 BaseCommand 构造函数和属性声明方式
- 简化 GenerateCommitCommand 中的配置更新逻辑
- 重构 SelectModelCommand 配置获取方式
- 移除多个文件中未使用的导入
- 改进类型安全性和代码格式化
  • Loading branch information
littleCareless committed Dec 12, 2024
1 parent 664d6d4 commit d9cebd5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 17 deletions.
13 changes: 10 additions & 3 deletions src/commands/BaseCommand.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import * as vscode from "vscode";
import { NotificationHandler } from "../utils/NotificationHandler";
import { ConfigurationManager } from "../config/ConfigurationManager";
import { LocalizationManager } from '../utils/LocalizationManager'
import { LocalizationManager } from "../utils/LocalizationManager";

export abstract class BaseCommand {
constructor(protected readonly context: vscode.ExtensionContext) {}
protected context: vscode.ExtensionContext;

constructor(context: vscode.ExtensionContext) {
this.context = context;
}

protected async validateConfig(): Promise<boolean> {
if (!(await ConfigurationManager.getInstance().validateConfiguration())) {
Expand All @@ -14,7 +18,10 @@ export abstract class BaseCommand {
return true;
}

protected async handleError(error: unknown, errorMessage: string): Promise<void> {
protected async handleError(
error: unknown,
errorMessage: string
): Promise<void> {
console.error(errorMessage, error);
if (error instanceof Error) {
await NotificationHandler.error(
Expand Down
11 changes: 5 additions & 6 deletions src/commands/GenerateCommitCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import { NotificationHandler } from "../utils/NotificationHandler";
import { ProgressHandler } from "../utils/ProgressHandler";
import { AIProviderFactory } from "../ai/AIProviderFactory";
import { SCMFactory } from "../scm/SCMProvider";
import { getProviderModelConfig, type ConfigKey } from "../config/types";
import { DISPLAY_NAME } from "../constants";
import { getMaxCharacters } from "../ai/types";
import { type ConfigKey } from "../config/types";
import { LocalizationManager } from "../utils/LocalizationManager";
import { ModelPickerService } from "../services/ModelPickerService";

Expand Down Expand Up @@ -35,8 +33,8 @@ export class GenerateCommitCommand extends BaseCommand {
}

const config = ConfigurationManager.getInstance();
await config.updateConfig("PROVIDERS_OPENAI_BASEURL" as ConfigKey, baseURL);
await config.updateConfig("PROVIDERS_OPENAI_APIKEY" as ConfigKey, apiKey);
await config.updateConfig("PROVIDERS_OPENAI_BASEURL", baseURL);
await config.updateConfig("PROVIDERS_OPENAI_APIKEY", apiKey);
return true;
}

Expand Down Expand Up @@ -219,7 +217,8 @@ export class GenerateCommitCommand extends BaseCommand {

const result = await aiProvider.generateResponse({
...configuration.base, // 包含 systemPrompt, language 等基础配置
...configuration.features.commitOptions, // 包含 allowMergeCommits, useEmoji 等选项
...configuration.features.commitFormat,
...configuration.features.codeAnalysis,
additionalContext: currentInput,
diff: diffContent,
model: selectedModel,
Expand Down
21 changes: 13 additions & 8 deletions src/commands/SelectModelCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,27 @@ import * as vscode from "vscode";
import { BaseCommand } from "./BaseCommand";
import { ConfigurationManager } from "../config/ConfigurationManager";
import { NotificationHandler } from "../utils/NotificationHandler";
import { AIProviderFactory } from "../ai/AIProviderFactory";
import { getProviderModelConfig } from "../config/types";
import { LocalizationManager } from "../utils/LocalizationManager";
import { ModelPickerService } from "../services/ModelPickerService";

export class SelectModelCommand extends BaseCommand {
constructor(context: vscode.ExtensionContext) {
super(context);
}

async execute(): Promise<void> {
const config = ConfigurationManager.getInstance();
const configuration = config.getConfiguration();
const configManager = ConfigurationManager.getInstance();

// 只获取需要的配置项
const currentProvider = configManager.getConfig("BASE_PROVIDER");
const currentModel = configManager.getConfig("BASE_MODEL");

const modelSelection = await this.showModelPicker(
configuration.base.provider,
getProviderModelConfig(configuration, configuration.base.provider)
currentProvider,
currentModel
);

if (modelSelection) {
await config.updateAIConfiguration(
await configManager.updateAIConfiguration(
modelSelection.provider,
modelSelection.model
);
Expand Down

0 comments on commit d9cebd5

Please sign in to comment.