generate-frontend-lint-configlisted
Install: claude install-skill CloudyWing/ai-dotfiles
# 產生或補齊前端 Lint 設定
## 範本來源
本 Skill 同時管理兩個檔案,各自以對應範本為單一來源:
| 目標檔案 | 範本來源 |
| --- | --- |
| `.prettierrc.json` | `~/.ai-agents/templates/.prettierrc.json` |
| `eslint.config.js` | `~/.ai-agents/templates/eslint.config.js` |
修改建議規則時,**只改範本檔,不改 SKILL.md**。SKILL.md 僅描述執行流程。
範本檔以 Vue 3 + TypeScript 專案為設計基準。若目標專案是純 JS、React、Svelte 等其他技術棧,產生後需手動調整 `eslint.config.js`,本 Skill 會在後續提醒中說明。
## 適用前提
本 Skill 假設目標專案:
- 是前端專案(存在 `package.json`,且依賴含 `vue`、`react`、`svelte`、`typescript` 其中之一,或目錄存在 `*.vue`、`*.ts`、`*.tsx`、`*.jsx`)。
- 使用 ESLint 9+(Flat Config)。若專案還在 ESLint 8 以下且使用 `.eslintrc.*`,本 Skill **不自動轉換格式**,僅產生 `eslint.config.js` 並提醒使用者手動處理舊版設定。
不符合前提時,告知使用者後流程終止。
## 執行步驟
### 1. 偵測專案環境
掃描目標專案:
1. 確認是否存在 `package.json`。
2. 從 `package.json` 的 `dependencies` / `devDependencies` 判斷主要框架(Vue / React / Svelte / 純 TS)。
3. 確認是否已存在 `.prettierrc*` 或 `eslint.config.*` / `.eslintrc.*`。
### 2. 讀取範本與既有設定
1. 讀取 `~/.ai-agents/templates/.prettierrc.json` 與 `~/.ai-agents/templates/eslint.config.js`。
2. 若目標專案已存在對應檔案:
- 完整讀取現有內容。
- 識別使用者已自訂的規則(如刻意設定的 `printWidth`、特定 `rules` 等)。
- 後續步驟僅**補齊範本中有、現有檔案中缺少的規則**,不覆蓋已有設定。
3. 若不存在,後續步驟以範本內容為基底建立全新檔案。
### 3. 衝突偵測
對 Prettier 與 ESLint 各自比對既有規則與範本規則:
**Prettier 衝突項**:同一鍵但值不同(如現有 `tabWidth: 2`、範本為 `4`)。
**ESLint 衝突項**:
- 既有 config 已 `extends` / 引入某 plugin,但範本指定不同版本或不同 plugin。
- 既有 `rules` 區塊中與範本同名但設定值不同。
對每個衝突點,提供**最小變更方案**:優先保留使用者已設定的值,僅補齊完全缺少的規則。
若衝突點超過 3 個,在進入步驟 4 前先列出衝突清單,讓使用者決定哪些保留、哪些覆蓋。
特別注意:既有檔案的 `extends` 順序與 plugin 載入順序對 ESLint Flat Con