From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照

---
 scripts/scanimpl_annalysis_addon_json.js |  125 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 125 insertions(+), 0 deletions(-)

diff --git a/scripts/scanimpl_annalysis_addon_json.js b/scripts/scanimpl_annalysis_addon_json.js
new file mode 100644
index 0000000..5bac4ce
--- /dev/null
+++ b/scripts/scanimpl_annalysis_addon_json.js
@@ -0,0 +1,125 @@
+/**
+ * 需求 0.3.1 生成處理額外分類腳本
+ * * 執行方式:
+ * node scripts/scanimpl_annalysis_addon_json.js
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+// 尋找目標檔案的遞迴函數
+function findTargetJsonFiles(dir, fileList = []) {
+  if (!fs.existsSync(dir)) return fileList;
+
+  const files = fs.readdirSync(dir);
+  for (const file of files) {
+    const filePath = path.join(dir, file);
+    const stat = fs.statSync(filePath);
+
+    // 略過不需要掃描的系統或依賴目錄
+    if (stat.isDirectory() && !['node_modules', '.git', 'scripts'].includes(file)) {
+      findTargetJsonFiles(filePath, fileList);
+    } else if (file.startsWith('scanimpl_annalysis.') && file.endsWith('.json')) {
+      fileList.push(filePath);
+    }
+  }
+  return fileList;
+}
+
+function main() {
+  // 設定路徑參數 (以執行時的目錄為基準)
+  const baseDir = path.join(process.cwd(), 'doc/curtis/prompt/scanimpl_analysis');
+  const classificationFilePath = path.join(baseDir, '02', 'team_tasks_classification.json');
+
+  console.log('=============================================');
+  console.log('開始執行額外分類整合...');
+  console.log(`讀取額外分類檔: ${classificationFilePath}`);
+
+  if (!fs.existsSync(classificationFilePath)) {
+    console.error(`[錯誤] 找不到額外分類檔: ${classificationFilePath}`);
+    console.log('請確認是否在專案根目錄下執行此腳本。');
+    return;
+  }
+
+  // 1. 讀取並解析 team_tasks_classification.json
+  const classificationData = JSON.parse(fs.readFileSync(classificationFilePath, 'utf8'));
+
+  // 建立 lineno 到 tags 的 Mapping 字典
+  // 這麼做可以處理同一個 lineno 同時要新增多個不同 tag 的情況
+  const addonMap = new Map();
+  classificationData.forEach(item => {
+    if (!item.lineno || !item.tag) return;
+
+    // 將 lineno 轉為字串以確保後續比對型別一致
+    const linenoStr = String(item.lineno);
+    if (!addonMap.has(linenoStr)) {
+      addonMap.set(linenoStr, new Set());
+    }
+    addonMap.get(linenoStr).add(item.tag);
+  });
+
+  console.log(`成功載入 ${addonMap.size} 筆需要更新的行號設定。`);
+
+  // 2. 找出專案內所有的 scanimpl_annalysis.*.json 檔案
+  const targetFiles = findTargetJsonFiles(baseDir);
+
+  if (targetFiles.length === 0) {
+    console.warn(`[警告] 在專案中找不到任何 scanimpl_annalysis.*.json 檔案`);
+    return;
+  }
+
+  let totalUpdatedFiles = 0;
+  let totalAddedTags = 0;
+
+  // 3. 處理每一個目標 JSON 檔
+  targetFiles.forEach(filePath => {
+    const fileName = path.basename(filePath);
+    let isModified = false;
+    let fileContent;
+
+    try {
+      fileContent = JSON.parse(fs.readFileSync(filePath, 'utf8'));
+    } catch (e) {
+      console.error(`[錯誤] 解析檔案 ${fileName} 失敗:`, e.message);
+      return;
+    }
+
+    // 0.3.1.1 步驟1 變更資料
+    if (Array.isArray(fileContent)) {
+      fileContent.forEach(methodDef => {
+        const currentLIndex = String(methodDef.lIndex);
+
+        // 檢查該方法的 lIndex 是否存在於我們要添加的對映表中
+        if (addonMap.has(currentLIndex)) {
+          const newTags = Array.from(addonMap.get(currentLIndex));
+
+          if (!methodDef.tags) {
+            methodDef.tags = [];
+          }
+
+          newTags.forEach(newTag => {
+            // 避免重複添加相同的 tag
+            if (!methodDef.tags.includes(newTag)) {
+              methodDef.tags.push(newTag);
+              isModified = true;
+              totalAddedTags++;
+              console.log(`  [新增] 檔案: ${fileName} | 行號: ${currentLIndex} | 新增 Tag: "${newTag}"`);
+            }
+          });
+        }
+      });
+    }
+
+    // 0.3.1.2 步驟2 寫入資料
+    if (isModified) {
+      fs.writeFileSync(filePath, JSON.stringify(fileContent, null, 2), 'utf8');
+      totalUpdatedFiles++;
+    }
+  });
+
+  console.log('=============================================');
+  console.log(`執行完畢!`);
+  console.log(`共更新了 ${totalUpdatedFiles} 個檔案,累計新增了 ${totalAddedTags} 個標籤。`);
+}
+
+main();

--
Gitblit v1.8.0