feat: 适配器 i18n + Provider 动态注册 + SetupView 重构 + jars 资源

- 适配器 i18n 接入(eslint/pmd/sql-lint/stylelint)
- Provider 动态注册机制(registry.ts + providers.json + factory 重构)
- SetupView 全面重构(setupView.ts 新增 600+ 行)
- i18n 消息扩展(messages.ts +210 行)
- 规则导入流程优化(import-service / prompt-builder)
- 新增 PMD jars 依赖及测试用例
This commit is contained in:
范智鹏
2026-07-28 22:57:15 +08:00
parent 83712aa260
commit effcf30802
72 changed files with 6568 additions and 238 deletions
@@ -0,0 +1,66 @@
# Excel 多 Sheet 导入设计
## 1. 背景
当前 `ExcelConverter.convert()` 仅读取 Excel 文件的第一个 Sheet`workbook.SheetNames[0]`),后续 Sheet 被忽略。用户需要导入包含多个 Sheet 的 Excel 文件,将全部规则合并输出。
## 2. 目标
支持多 Sheet Excel 导入,所有 Sheet 合并为一份 YAML 输出。不改变 `RuleConverter` 接口签名。
## 3. 设计
### 3.1 数据流
```
用户选择 .xlsx/.xls 文件(多 Sheet
ExcelConverter.convert()
├── XLSX.readFile → 获取 workbook
├── 遍历 workbook.SheetNames
│ ├── 每个 sheet → sheet_to_json → buildMarkdownTable
│ └── 添加 "## SheetName" 标题分隔
├── 合并为一张大 Markdown 文本
├── 调用 convertContentWithAI(combined, context)
└── AI 返回 YAML(合并所有规则)→ 写入 yamlPath
```
### 3.2 变更范围
只改一个文件:`src/rules/converters/excel-converter.ts`
| 变更 | 说明 |
|------|------|
| 删除 `const sheetName = workbook.SheetNames[0]` | 不再只取第一个 Sheet |
| 新增 `buildSheetsMarkdown(workbook)` | 遍历所有 Sheet,逐个转 Markdown 表格并拼接 |
| 修改 `convert()` 内部 | 调用 `buildSheetsMarkdown` 替代单 Sheet 逻辑 |
| 保留 `buildMarkdownTable(rows)` | 复用现有单 Sheet 转表格函数 |
| 保留错误处理 | try/catch、空 Sheet 校验 |
### 3.3 合并格式示例
```
## Sheet1 - 命名规范
| id | severity | description | message |
|----|----------|-------------|---------|
| naming-1 | error | 类名使用 PascalCase | 请修改为 PascalCase |
## Sheet2 - 安全规范
| id | severity | description | message |
|----|----------|-------------|---------|
| security-1 | error | 禁止硬编码密码 | 请将密码移入配置文件 |
```
### 3.4 边界处理
- **空 Sheet**:跳过(不报错),继续处理其他 Sheet
- **全部 Sheet 为空**:报错提示"Excel 工作表中没有数据"
- **不同 Sheet 列结构不同**:各自独立转 Markdown 表格,AI 自主理解
- **单 Sheet 文件**:行为不变,兼容现有功能
### 3.5 不涉及变更
- `setupView.ts`ExcelConverter 已注册,无需改动
- `import-service.ts``convertContentWithAI` 已存在,无需改动
- `converter.ts``RuleConverter` 接口不变
- 其他 converter:不受影响