Skip to content

Commit

Permalink
♻️ refactor(config): 重构配置系统架构
Browse files Browse the repository at this point in the history
- 删除旧的配置注册系统和相关文件
- 优化配置类型定义,使用更严格的类型检查
- 修正韩语显示问题
- 简化配置项结构,移除冗余定义
- 改进类型生成逻辑,支持多级配置嵌套
- 优化配置管理器的错误处理和类型安全
  • Loading branch information
littleCareless committed Dec 11, 2024
1 parent b413151 commit 7eb3ff2
Show file tree
Hide file tree
Showing 10 changed files with 147 additions and 558 deletions.
124 changes: 3 additions & 121 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,124 +60,6 @@
"configuration": {
"title": "Dish AI Commit",
"properties": {
"dish-ai-commit.commitLanguage": {
"default": "Simplified Chinese",
"description": "Commit message language",
"enum": [
"Simplified Chinese",
"Traditional Chinese",
"Japanese",
"Korean",
"Czech",
"German",
"French",
"Italian",
"Dutch",
"Portuguese",
"Vietnamese",
"English",
"Spanish",
"Swedish",
"Russian",
"Bahasa",
"Polish",
"Turkish",
"Thai"
],
"enumDescriptions": [
"简体中文",
"繁體中文",
"にほんご",
"한국어",
"česky",
"Deutsch",
"française",
"italiano",
"Nederlands",
"português",
"tiếng Việt",
"english",
"español",
"Svenska",
"русский",
"bahasa",
"Polski",
"Turkish",
"ไทย"
],
"type": "string"
},
"dish-ai-commit.systemPrompt": {
"type": "string",
"default": "",
"description": "Custom system prompt for generating commit messages"
},
"dish-ai-commit.provider": {
"type": "string",
"enum": [
"OpenAI",
"Ollama",
"VS Code Provided"
],
"default": "OpenAI",
"description": "默认的 AI 提供商"
},
"dish-ai-commit.model": {
"type": "string",
"default": "gpt-3.5-turbo",
"description": "AI模型选择"
},
"dish-ai-commit.openai.apiKey": {
"type": "string",
"description": "OpenAI API 密钥"
},
"dish-ai-commit.openai.baseUrl": {
"type": "string",
"default": "https://api.openai.com/v1",
"description": "OpenAI API 基础 URL"
},
"dish-ai-commit.zhipuai.apiKey": {
"type": "string",
"description": "智谱 AI API 密钥"
},
"dish-ai-commit.dashscope.apiKey": {
"type": "string",
"description": "DashScope API 密钥"
},
"dish-ai-commit.doubao.apiKey": {
"type": "string",
"description": "豆包 API 密钥"
},
"dish-ai-commit.ollama.baseUrl": {
"type": "string",
"default": "http://localhost:11434",
"description": "Ollama API 基础 URL"
},
"dish-ai-commit.enableDiffSimplification": {
"type": "boolean",
"default": false,
"description": "启用 diff 内容简化功能(警告:启用此功能可能会导致生成的提交信息不够准确)"
},
"dish-ai-commit.diffSimplification.maxLineLength": {
"type": "number",
"default": 120,
"description": "简化后每行的最大长度"
},
"dish-ai-commit.diffSimplification.contextLines": {
"type": "number",
"default": 3,
"description": "保留的上下文行数"
},
"dish-ai-commit.allowMergeCommits": {
"type": "boolean",
"default": false,
"description": "是否允许将多个文件的变更合并为一条提交信息"
},
"dish-ai-commit.useEmoji": {
"type": "boolean",
"default": true,
"description": "在提交信息中使用 emoji"
},
"dish-ai-commit.base.language": {
"type": "string",
"default": "Simplified Chinese",
Expand Down Expand Up @@ -207,7 +89,7 @@
"简体中文",
"繁體中文",
"にほんご",
"한국��",
"한국어",
"česky",
"Deutsch",
"française",
Expand All @@ -233,7 +115,7 @@
"dish-ai-commit.base.provider": {
"type": "string",
"default": "OpenAI",
"description": "默认的 AI 提供商",
"description": "AI provider",
"enum": [
"OpenAI",
"Ollama",
Expand Down Expand Up @@ -405,4 +287,4 @@
]
}
}
}
}
3 changes: 1 addition & 2 deletions src/ai/utils/generateHelper.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { NotificationHandler } from "../../utils/NotificationHandler";
import { LocalizationManager } from "../../utils/LocalizationManager";
import { generateCommitMessageSystemPrompt } from "../../prompt/prompt";
import { DEFAULT_CONFIG } from "../../config/default";
import { AIRequestParams } from "../types";

// 添加错误类型枚举
Expand Down Expand Up @@ -80,7 +79,7 @@ export function getSystemPrompt(params: AIRequestParams): string {
return (
params.systemPrompt ||
generateCommitMessageSystemPrompt(
params.language || DEFAULT_CONFIG.language,
params.language || "",
params.allowMergeCommits || false,
params.splitChangesInSingleFile || false,
params.scm || "git"
Expand Down
17 changes: 3 additions & 14 deletions src/commands/GenerateCommitCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@ export class GenerateCommitCommand extends BaseCommand {
}

const config = ConfigurationManager.getInstance();
const configuration = config.getConfiguration();
// 使用新的封装方法更新配置
await config.updateAIConfiguration(
modelSelection.provider,
Expand Down Expand Up @@ -211,9 +210,6 @@ export class GenerateCommitCommand extends BaseCommand {
await NotificationHandler.info(locManager.getMessage("no.changes"));
throw new Error(locManager.getMessage("no.changes"));
}

console.log("diffContent", diffContent, selectedFiles);

const {
provider: newProvider,
model: newModel,
Expand All @@ -222,21 +218,14 @@ export class GenerateCommitCommand extends BaseCommand {
} = await this.getModelAndUpdateConfiguration(provider, model);

const result = await aiProvider.generateResponse({
...configuration.base, // 包含 systemPrompt, language 等基础配置
...configuration.features.commitOptions, // 包含 allowMergeCommits, useEmoji 等选项
additionalContext: currentInput,
diff: diffContent,
systemPrompt: configuration.base.systemPrompt,
model: selectedModel,
language: configuration.base.language,
scm: scmProvider.type ?? "git",
allowMergeCommits:
configuration.features.commitOptions.allowMergeCommits,
splitChangesInSingleFile: false,
additionalContext: currentInput, // 添加额外上下文
useEmoji: configuration.features.commitOptions.useEmoji, // 添加这一行
});

// progress.report({
// message: locManager.getMessage("progress.generation.complete"),
// });
return result;
}
);
Expand Down
4 changes: 0 additions & 4 deletions src/commands/SelectModelCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@ import { ModelPickerService } from "../services/ModelPickerService";

export class SelectModelCommand extends BaseCommand {
async execute(): Promise<void> {
// if (!(await this.validateConfig())) {
// return;
// }

const config = ConfigurationManager.getInstance();
const configuration = config.getConfiguration();
const modelSelection = await this.showModelPicker(
Expand Down
9 changes: 4 additions & 5 deletions src/config/ConfigSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export const CONFIG_SCHEMA = {
"简体中文",
"繁體中文",
"にほんご",
"한국��",
"한국어",
"česky",
"Deutsch",
"française",
Expand All @@ -51,14 +51,13 @@ export const CONFIG_SCHEMA = {
systemPrompt: {
type: "string",
description: "Custom system prompt",
default: "", // 动态生成
isSpecial: true, // 标记需要特殊处理的配置
default: "",
},
provider: {
type: "string",
default: "OpenAI",
default: "OpenAI", // 其他都是用OpenAI的SDK适配
enum: ["OpenAI", "Ollama", "VS Code Provided"],
description: "默认的 AI 提供商",
description: "AI provider",
},
model: {
type: "string",
Expand Down
35 changes: 26 additions & 9 deletions src/config/ConfigurationManager.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import * as vscode from "vscode";
import { ConfigKeys, ConfigKey, ExtensionConfiguration } from "./types";
import {
ConfigKeys,
ConfigKey,
ExtensionConfiguration,
type ConfigurationValueType,
} from "./types";
import { EXTENSION_NAME } from "../constants";
import { generateCommitMessageSystemPrompt } from "../prompt/prompt";
import { AIProviderFactory } from "../ai/AIProviderFactory";
Expand Down Expand Up @@ -101,19 +106,27 @@ export class ConfigurationManager {
this.context = context;
}

public getConfig<T>(key: ConfigKey, useCache: boolean = true): T {
// 修改 getConfig 方法的类型处理
public getConfig<K extends ConfigKey>(
key: K,
useCache: boolean = true
): ConfigurationValueType[K] {
console.log("获取配置项:", key, ConfigKeys);
const configKey = ConfigKeys[key].replace("dish-ai-commit.", "");

if (!useCache) {
// 直接从 configuration 获取最新值
return this.configuration.get<T>(configKey) as T;
// 直接从 configuration 获取最新值,确保返回正确的类型
const value =
this.configuration.get<ConfigurationValueType[K]>(configKey);
return value as ConfigurationValueType[K];
}

if (!this.configCache.has(configKey)) {
this.configCache.set(configKey, this.configuration.get<T>(configKey));
const value =
this.configuration.get<ConfigurationValueType[K]>(configKey);
this.configCache.set(configKey, value);
}
return this.configCache.get(configKey);
return this.configCache.get(configKey) as ConfigurationValueType[K];
}

public getConfiguration(): ExtensionConfiguration {
Expand All @@ -137,7 +150,11 @@ export class ConfigurationManager {
return config as ExtensionConfiguration;
}

public async updateConfig<T>(key: ConfigKey, value: T): Promise<void> {
// 修改updateConfig方法签名
public async updateConfig<K extends ConfigKey>(
key: K,
value: ConfigurationValueType[K]
): Promise<void> {
await this.configuration.update(
ConfigKeys[key].replace("dish-ai-commit.", ""),
value,
Expand Down Expand Up @@ -289,8 +306,8 @@ export class ConfigurationManager {
model: string
): Promise<void> {
await Promise.all([
this.updateConfig("BASE_PROVIDER" as ConfigKey, provider),
this.updateConfig("BASE_MODEL" as ConfigKey, model),
this.updateConfig("BASE_PROVIDER", provider),
this.updateConfig("BASE_MODEL", model),
]);
}
}
Loading

0 comments on commit 7eb3ff2

Please sign in to comment.